Бывают случаи, когда вам нужно создать расписание выполнимых задач на сервере. Предположим что вы хотите сделать резервную копию на жесткий диск раз в неделю, или вы хотите запустить скрипт в 6 часов утра каждый день. Все эти задачи, которые вы хотите запустить в определённый интервал времени, могут быть настроены с помощью Cron. Демон Cron давно используется там, где нужно выполнять команды пользователя в определённые промежутки времени. Это руководство представляет собой учебник в котором шаг за шагом описывается как можно планировать такие задачи, используя программу с названием Crontab.

Настройка crontab на самом деле очень проста.

Для редактирования расписания crontab используйте следующую команду

1
crontab -e

Если редактор по умолчанию не определен, то вы можете увидеть сообщение об ошибке:

1
2
/bin/sh: /bin/vi: No such file or directory
crontab: "/bin/vi" exited with status 127

Для того чтоб определить используемый редактор по умолчанию, выполним

1
export EDITOR=vim

Теперь Vim будет использоваться как редактор по умолчанию. Вы можете использовать любой редактор на ваш выбор, например (emacs, nano и т.д.).

1
2
3
4
5
6
7
* * * * * команда/которая/должна/быть/выполнена
| | | | |
| | | | ----- День недели (0 - 7) (Воскресение=0 или 7)
| | | ------- Месяц (1 - 12)
| | --------- День месяца (1 - 31)
| ----------- Час (0 - 23)
------------- Минуты (0 - 59)

Предположим, вы хотите запускать скрипт каждый час

1
0 * * * * /root/script.sh

Выполнение команды каждые 10 минут

1
*/10 * * * * command

Выполнение команды в 5 часов утра

1
0 5 * * * command

Выполнение команды каждые выходные в 2 часа утра

1
0 2 * * 5-7 command

Выполнение команды в субботу

1
0 2 * * sat command

Отключение отправки Email По умолчанию crontab отправляет email для root каждый раз при выполнении задания, вы можете отключить это. Вам нужно всего лишь направить вывод на псевдоустройство /dev/null — это, своего рода, “черная дыра” в системе. В Unix-подобных операционных системах, /dev/null представляет собой специальный файл, который удаляет все данные, записанные в него.

1
0 * * * * /root/script.sh > /dev/null 2>&1

Вы можете определить переменную MAILTO, чтобы отсылать почту на определенный адрес электронной почты.

1
MAILTO="test@example.com"

Но использование MAILTO будет отсылать результат всех cronjobs. Предположим, вы хотите получить результат одного задания cronjob. Вы можете сделать это с помощью mailx. Убедитесь, что mailx установлен.

1
2
yum install mailx #Для Fedora
sudo apt-get install mailx #Для Ubuntu

 

1
*/10 * * * * /root/script.sh 2>&1 | mail -s "Output From Cron Job" username@example.com

Быстро удалить все задания Crontab можно с помощью

1
crontab -r

В cronjob применяются восемь специальных строк, которые могут также использоваться, чтобы сделать вид файл более читабельным

1
2
3
4
5
6
7
8
@reboot Run at startup
@hourly Run at "0 1 1 * *" 
@daily Run at "0 0 * * *" 
@midnight Run at "0 0 * * *" 
@weekly Run at "0 0 * * 0"
@monthy Run at "0 0 1 * *"
@yearly Run at "0 0 1 1 *"
@annually Run at "0 0 1 1 *"

Источник оригинального текста linuxers.org