我在 cron.daily 中有一个脚本,该脚本每天早上在特定时间运行。我需要更改其运行时间。
我如何更改 cron.daily 运行脚本的时间?
答案1
在 Red Hat 5 或更早版本中,这是由 控制的/etc/crontab
。
较新版本使用/etc/anacrontab
。默认情况下,cron.daily
脚本在 4:02 运行。编辑/etc/crontab
将修改该时间。
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
在 Debian/Ubuntu 系统上,这/etc/crontab
也是受控制的。
例如;默认的 Ubuntu 12.04 安装:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
无论哪种情况,您都可以在这里找到有关使用哪种语法的更多详细信息:http://linux.die.net/man/5/crontabman 5 crontab
或者在几乎任何 Linux 系统上运行。
答案2
在 RHEL/CentOS 6 及以上版本中
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
答案3
Ubuntu 19.10(可能更早版本)正在使用systemd
计时器来运行anacron
。
解决方案
更改执行时间的方法anacron
是使用此命令:
sudo systemctl edit --full anacron.timer
然后修改该行:
OnCalendar=*-*-* 07..23:30
什么不起作用
编辑/etc/crontab
没有帮助。
25 7 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
运算符之前的部分||
仅测试是否anacron
已安装,不会执行任何操作。 而之后的部分仅在之前的部分未成功完成(惰性运算符评估)时才执行,这意味着anacron
未安装。
编辑/etc/cron.d/anacron
也无济于事。
30 7-23 * * * root [ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/invoke-rc.d anacron start >/dev/null; fi
if [ ! -d /run/systemd/system ]
安装 systemd 后,该条件会阻止脚本运行。
改变执行时间的正确方法是通过编辑systemd
计时器,如开头所述。
答案4
如果没有这条线,这并不能解决任何问题。
尝试使用以下命令查找提到 cron.daily 的位置
grep -R cron.daily /etc
然后从那里拿走。