Часто бывают такие ситуации, когда надо запускать команды или сценарии без личного вмешательства. Например, сделать резервные копии базы данных или почистить файлы логов. В Linux для этого существует несколько способов достижения этого. Одним из инструментов является демон cron.
Этот демон запускается вместе с системой и работает, пока работает система. Его работа заключается в считывании файлов конфигурации со списками команд и временем в которые они должны быть запущены. Эти команды выполняются оболочкой sh, поэтому все, что запускается в ней, может и запускаться с помощью cron.
Файлы конфигурации называются crontab и хранятся в /var/spool/cron, для пользователя и /etc/crontab, для всей системы. Следует так же учитывать, что для каждого пользователя существует, только один файл. Эти файлы представляют собой обычные текстовые файлы с именем пользователя, которому они принадлежат. Демон cron использует эту информацию для того, чтобы определить от чего имени запустить команду. Для редактирования и управления этими файлами используется команда crontab.
Давайте, теперь, рассмотрим поближе, как это работает. Для редактирования файла crontab используем следующую команду
$crontab -e
Откроется файл, принадлежащий пользователю от имени которого была запущена эта команда и в редакторе, который выбран по умолчанию в системе. Имейте в виду, что если вы хотите запускать команды от имени суперпользователя, то и редактировать crontab надо так же от имени суперпользователя. Так же, если вы обладаете достаточными правами, можно отредактировать файл другого пользователя, с помощью следующей команды:
$crontab -u username -e
Теперь о синтаксисе файла. Каждая строка в файле содержит шесть полей, которые расположены в следующем порядке
минута час день месяц день_недели команда
Первые пять полей означают когда надо выполнить команду, последнее поле, что надо выполнить.
минута - может содержать значение от 0-59, и означает в какую минуту часа необходимо запускать команду.
час - час дня, когда необходимо запустить команду, значение может быть от 0 до 23.
день - день месяца, значение от 1 до 31.
месяц - месяц года, значение с 1 по 12
день_недели - день недели, значение от 0 до 6 ( 0 - воскресенье)
Так же каждое поле может содержать значение *, которое может означать любое значение. Диапазон значений, например, значение дня может быть 10-13, что означает с 10 по 13 число. В этом диапазоне можно так же задать шаг, например 10-20/2, означает, что запускать команду надо с 10 по 20 число с шагом два дня ( 10, 12, 14 и т.д. числа). Еще можно через запятую указать значения, которые необходимо. 11, 15, 23 - в поле день, будет запускать команду 11, 15 и 23 числа.
Итак, с учетом этих знаний, можно составить следующую строку
0 23 * * * rm -rf /home/user/.ssh/known_hosts
Вот такая имеется у меня в crontab, которая очищает записи знакомых хостов, к которым я коннектился. Довольно таки полезно это делать.
Кстати, есть еще такой нюанс, касаемо полей день и день_недели. По идеи, тут возникает некая двусмысленность, так как по сути каждый день можно рассматривать и как день недели, и как день месяца. Тут просто надо запомнить, что команда будет выполнятся и в день месяца и в день недели. Например,
15 15 13 * 5
Будет выполняться каждую пятницу в 15-15 и каждого 13-го числа в 15-15, а не только в пятницу 13-го.
Заключение
Итак, в этой статье, рассмотрел один из способов вызова периодических процессов, как cron. С помощью этого средства, можно сильно облегчить свою работу, избавившись от рутины. Для таких задач, можно еще использовать системные таймеры, но об этом говорим позже. Так что подписывайтесь, чтобы не пропустить. Так же выход новой статьи публикую в своем телеграмм-канале, так что welcome.