Использование crontab в Ubuntu
Настройка и использование планировщика cron для запуска команд по расписанию.
Примечание
Отличный сервис для тестирования правила расписания: https://crontab.guru/#0_*_*_*_*
Добавление crontab файла расписания
Файлы с расписаниями расположены в каталоге /etc/cron.d/.
Вы можете создать в этом каталоге новый файл (не используйте символьные ссылки):
sudo cp -f crontab-3g /etc/cron.d/
sudo chmod 644 /etc/cron.d/crontab-3g
После его редактирования примените новую cron конфигурацию:
sudo service cron reload # или
sudo /etc/init.d/cron reload # или
Пример crontab файла
Пример crontab файла /etc/cron.d/crontab-example который каждый час запускает скрипт every_hour.sh и пишет вывод в лог.
Вторая команда раз в сутки очищает лог файл.
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=your@gmail.com
DISPLAY=:0.0
IS_CRON=true
# m h d m day command #
0 * * * * /home/user/every_hour.sh >> /home/user/every_hour_cron.log 2>&1
0 0 * * * : > /home/user/every_hour_cron.log
MAILTO - емейл, на который будет отправлено сообщение о выполнении задания.
DISPLAY - нужен если выполняемая команда будет использовать графику (например, для всплывающих уведомлений)
Внимание!
В php-скриптах все объявленные в crontab файле переменные будут доступны в глобальном массиве $_SERVER! Не указывайте секретные данные.
Примечание
Если результатом выполнения команды из crontab являются какие-то выходные данные, то демон cron обычно высылает эти данные пользователю по email. Что бы отключить данную функцию для любой специфичной команды, вы можете перенаправить вывод на /dev/null. Для отключения пересылки сообщений по email из crontab добавьте в строку вызова команды:
> /dev/null 2>&1
Это перенаправит вывод на устройство /dev/null, однако, если возникнут ошибки, то вы их тоже не увидите!
Формат/правила расписаний
Станлдартная запись установки времени запуска команды:
Мин Час День Мес День_недели Команда
День недели задается как 0-6 (1-7), часы 0-23, а месяцы 1-12.
Описание стандартного формата:
- Запятая , определяет список значений, например: "1,3,4,7,8".
- Тире - определяет диапазон значений, например: "1-6", что эквивалентно "1,2,3,4,5,6".
- Слэш / используется для установки кратных значений. Например, "*/3" - каждые 3 часа, начиная с 00:00.
- Звездочка * определяет все допустимые значения.
Примечание
В некоторых системах доступны алиасы. Но они не являются стандартом!
#Алиас # Описание # Соответствует
@yearly Раз в год 0 0 1 1 *
@annually Тоже что и @yearly
@monthly Раз в месяц 0 0 1 * *
@weekly Раз в неделю 0 0 * * 0
@daily Раз в день 0 0 * * *
@midnight В полночь 00:00
@hourly Каждый час 0 * * * *
Управление расписаниями
Добавить файл расписания:
crontab имя_файла_расписания
Показать список файлов расписания вашего пользователя:
crontab -l
Отредактировать crontab для запуска заданий от имени вашего пользователя:
crontab -e
Отредактировать crontab для запуска заданий от имени суперпользователя:
sudo crontab -e
При редактировании crontab файла root'а, файл был сохранен как: /tmp/crontab.XD84aC/crontab. Однако сами crontab файлы пользователей располагаются в каталоге /var/spool/cron/crontabs/:
sudo ls -la /var/spool/cron/crontabs/
Каждый файл соответствует имени пользователя, под который будет выполняться задание.
Вы можете открыть файл пользователя root (но не редактируйте его напрямую без утилиты crontab!):
sudo gedit /var/spool/cron/crontabs/root
Примеры crontab расписаний
Примеры установки времени запуска:
@reboot ~/script.sh -- при загрузке
@daily ~/script.sh -- ежедневно в 00:00
*/10 * * * * ~/script.sh -- каждые 10 мин
0 0 * * 1 ~/script.sh -- в понедельник
* */2 * * * ~/script.sh -- в четные часы
* 0,12 * * * ~/script.sh -- в 00:00 и 12:00
59 23 31 dec * ~/script.sh -- Новый Год
Каждый час:
0 */1 * * * php php /home/php/website/artisan fetch:cloud:categories
0 */1 * * * php bash -lc 'cd /home/php/website/ && php artisan fetch:cloud:categories'
#cron.d, #crontab