Как использовать Cron в Linux?

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>, @daily, @weekly, @monthly и @reboot Выражение *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 и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен

Похожие статьи

Комментарии (2)

  • А в графическом исполнении есть планировщик для Linux ? Что то только одна консоль!

  • Не совсем понятно, почему переменная DISPLAY=:0; пишется именно в таком виде – с нулем и двоеточием перед ним.