Использование crontab в Ubuntu

Категория: Linux

Настройка и использование планировщика 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

категория: Linux