Простыми словами, переменные расписания запускают команды:
- @daily — раз в день
- @weekly — раз в неделю
- @monthly — раз в месяц
Как же понять, в какое именно время запускаются команды?..
…Заходим в консоль сервера и используем команду:
cat /etc/anacrontab
Вывод примерно такой:
# /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
Пояснения к этой системе можно найти, введя команду:
man anacrontab
Вывод будет примерно такой:
The START_HOURS_RANGE variable defines an interval (in hours) when scheduled jobs can be run. In case this time interval is missed, for example, due to a power down, then scheduled jobs are not executed that day. The RANDOM_DELAY variable denotes the maximum number of minutes that will be added to the delay in minutes variable which is specified for each job. A RANDOM_DELAY set to 45 would therefore add, randomly, between 0 and 45 minutes to the delay in minutes for each job in that particular anacrontab. When set to 0, no random delay is added. Empty lines are either blank lines, line containing white spaces only, or lines with white spaces followed by a '#' followed by an arbitrary comment. You can continue a line onto the next line by adding a '\' at the end of it. In case you want to disable Anacron, add the 0anacron cron job (which is a part of crontab(1)) into the /etc/cron.hourly/jobs.deny directory. EXAMPLE This example shows how to set up an Anacron job similar in functionality to /etc/crontab which starts all regular jobs between 3:00 and 22:00 only. A RANDOM_DELAY which can be 45 minutes at the most is specified. Jobs will run serialized in a queue where each job is started only after the previous one is finished. # environment variables SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root RANDOM_DELAY=45 # Anacron jobs will start between 6am and 8am. START_HOURS_RANGE=3-22 # delay will be 5 minutes + RANDOM_DELAY for cron.daily 1 5 cron.daily nice run-parts /etc/cron.daily 7 0 cron.weekly nice run-parts /etc/cron.weekly @monthly 0 cron.monthly nice run-parts /etc/cron.monthly
Пояснения:
- Если запускается несколько команд с одной и той же переменной времени (например, @daily), они все ставятся в очередь, сереализуются и выполняются по порядку, при этом
- START_HOURS_RANGE=3-22 — значит, что команды выполняются только во временном интервали с 3:00 до 22:00
- RANDOM_DELAY=45 — значит, что следующая команда выполнится только после окончания предыдущей, и через 5 минут (из таблицы с примерами команд) + рандомное количество минут между 0 и 45. Другими словами, через рандомное время между 5 и 50 минутами