У меня есть скрипт в cron.daily, который запускается каждое утро в определенное время. Мне нужно изменить время его запуска.
Как изменить время, в течение которого cron.daily запускает скрипты?
В 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/crontab или запустив man 5 crontab
практически в любой системе Linux.
в 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
В openSUSE crontab выглядит так:
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
#
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
#
-*/15 * * * * root test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1
В run-crons
команда проверяет временные метки файлов в /var/spool/cron/lastrun
среди прочего. Когда время с момента последнего выполнения истечет, он снова запустит файл cron.
На время можно повлиять, прикоснувшись к файлу. Например, чтобы установить его на 2012-11-17 03:15:
touch -t 201211140315 /var/spool/cron/lastrun/cron.daily
Если линии не было, это ничего не решит.
Попробуйте найти, где упоминается cron.daily, с помощью
grep -R cron.daily /etc
Тогда возьми это оттуда.
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
таймер, как объяснялось в начале.
Вы хотите сделать две вещи:
00 10 * * * /path/to/script