Cron – это широко распространенный инструмент, который используется для планирования задач или так называемых заданий в любой Unix-подобной операционной системе. Он может быть настроен на ежедневное, еженедельное или ежемесячное выполнение заданий, но также может быть настроен на выполнение в любой период или только один раз. Есть еще другой аналог cron – at.
Например, вы хотите запускать сценарий резервного копирования в нерабочее время. Используя задания cron, вы можете легко запланировать запуск сценария в определенное время ежедневно, каждый второй день, еженедельно или в любой другой период.
Задания Cron могут быть скриптами или командами bash, которые настраиваются на выполнение в определенное время с помощью формата строки unix-cron ( * * * * * * ).
Использование Crontab
Команда crontab может использоваться для редактирования или составления списка cronjobs для текущего пользователя или для других пользователей.
Если вы хотите отредактировать или добавить новый cronjob для текущего пользователя, вы можете использовать команду:
crontab -e
При первом запуске команды вам будет предложено выбрать редактор по умолчанию.
no crontab for john - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.tiny Choose 1-2 [1]:
После выбора редактора откроется редактор, в котором вы сможете добавлять, редактировать или удалять cronjobs. После открытия редактора вы можете использовать синтаксис cron, чтобы добавить свой первый cronjob.
Синтаксис cron использует выражения, которые отображают каждую минуту, час, день(месяц), месяц, день(неделю) для планирования заданий cron.
Example of job definition: .---------------- minute (0 - 59) | .------------- hour (0 - 23) | | .---------- day of month (1 - 31) | | | .------- month (1 - 12) OR jan,feb,mar,apr ... | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat | | | | | * * * * * command to be executed
Например, если вы хотите запускать сценарий резервного копирования каждый день в 3:30 утра, вы можете добавить задание cron
30 3 * * * /opt/backupscript.sh
Чтобы запускать сценарий каждую минуту, можно использовать выражение по умолчанию:
* * * * * /etc/somescript.sh
Ниже вы можете найти другие примеры планирования:
*/15 * * * * command/script - Every 15 minutes 0 8 * * 1-5 command/script - Monday to Friday at 08:00 AM. 0 16 * * 6,0 command/script - Every weekend at 04:00 PM. 0 0 15 * * command/script - Midnight every 15th of the month
Весь этот синтаксис cron выглядит очень запутанным, но вы можете воспользоваться некоторыми советами, чтобы легко настроить задания.
Современный cron также принимает следующие выражения рядом с командой или скриптом, который вы хотите запустить. hourly</code>,
reboot* означает, что задание будет запущено после перезагрузки.@daily
, @weekly
, @monthly
и @reboot
Выражение *
Вы также можете использовать сокращенную форму для обозначения дней недели или месяца. Вот несколько примеров:
5 4 * * Mon - 04:05 AM every Monday 0 0 * Mar Fri - Every Friday in March at Midnight
Cronjob для пользователей
Чтобы отредактировать или вывести список cronjob для других пользователей, вы можете использовать следующую команду:
crontab -u john -l
Это выведет список всех cronjobs для пользователя john. То же самое относится и к редактированию cronjobs для пользователя john.
crontab -u john -e
Эта команда откроет редактор, и каждое добавленное cronjob будет предназначено для пользователя john. Еще один способ легко редактировать cronjobs для разных пользователей – использовать конфигурационный файл /etc/crontab, здесь вы можете добавить следующую строку, чтобы запустить cronjob для пользователя john.
15 15 * * * john /path/somescript.sh
Этот cronjob будет запускать /path/somescript.sh для пользователя john в 15:15 каждый день.
Ежедневные, еженедельные, ежемесячные cronjobs.
Для ежедневного, еженедельного и ежемесячного запуска cronjob вам нужно будет создать файл сценария в каталоге, в котором указано, как часто вы хотите запускать этот cronjob.
Чтобы сценарий резервного копирования выполнялся раз в неделю, можно добавить файл в каталог /etc/cron.weekly.
Вам может быть интересно, в какой день этот сценарий будет выполняться каждую неделю. Чтобы проверить или изменить время запуска ежедневных, еженедельных или ежемесячных cronjobs, вы можете проверить файл /etc/crontab. Он должен выглядеть примерно так.
/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 Example of job definition: .---------------- minute (0 - 59) | .------------- hour (0 - 23) | | .---------- day of month (1 - 31) | | | .------- month (1 - 12) OR jan,feb,mar,apr ... | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat | | | | | * * * * * user-name command to be executed 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; } #
Используя определение задания в комментариях, вы можете увидеть, что в нашем случае ежедневные cronjobs запускаются в 6:25 каждый день для ежедневного сценария, 6:47 каждое воскресенье для еженедельного и 6:52 каждое 1-е число месяца для ежемесячного cronjobs.
Заключение
Хотя настройка или изменение заданий cron иногда может показаться пугающей или запутанной, мы надеемся, что эта статья помогла вам понять, как использовать задания cron, и облегчила вам задачу. Также есть сервисы, которые самостоятельно генерируют cron-строку за Вас.
А в графическом исполнении есть планировщик для Linux ? Что то только одна консоль!
Не совсем понятно, почему переменная DISPLAY=:0; пишется именно в таком виде – с нулем и двоеточием перед ним.