Планировщик заданий

Материал из ALT Linux Wiki
(перенаправлено с «Cron»)
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

В Windows-системах начиная с Windows 95 есть утилита Планировщик зданий, которая позволяет запланировать запуск программ или скриптов в определенные моменты времени с определенным интервалом. В мире UNIX тоже есть подобная утилита и называется она Cron.

Cron

Cron работает как демон и выполняет действия в определенное время, которые описаны в конфигурационных файлах.

Но, обо всем по порядку.

Как работать с утилитой

Настройки cron хранятся в /etc/crontab. И, теоретически, можно добавить задание отредактировав данный файл. Но, рекомендуется использовать утилиту crontab.

crontab -e

У вас откроется в редакторе (nano) следующий временный файл:

#minute (0-59),
#|      hour (0-23),
#|      |       day of the month (1-31),
#|      |       |       month of the year (1-12),
#|      |       |       |       day of the week (0-6 with 0=Sunday).
#|      |       |       |       |       commands
~
~
~

После завершения редактирования правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя и выполняться команды будут от имени пользователя.

Если вам надо сделать план на всю систему, то нужно запустить редактор cron от суперпользователя.

su-
crontab -e

После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя, причем, добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.

Синтаксис

Синтаксис правила выглядит так:

минута час день месяц день_недели /путь/к/исполняемому/файлу

  • минута - от 0 до 59
  • час - от 0 до 23
  • день - от 1 до 31
  • месяц - от 1 до 12
  • день недели - от 1 до 7
  • путь к исполняемому файлу - путь к программе или скрипту, должен указываться всегда полностью
  • звездочка вместо значения означает выполнение команды каждый(-ую) минуту/час/день/день недели

Для некоторых часто используемых наборов были созданы переменные:

  • @reboot - при загрузке, только один раз
  • @yearly, @annually - раз год
  • @monthly - раз в месяц
  • @weekly - раз в неделю
  • @daily, @midnight - каждый день
  • @hourly - каждый час

Команды

Просмотреть задачи

crontab -l

Удалить все задачи

crontab -r

Примеры команд

  • Каждый день в 12:30 перезагружать компьютер
30 12 * * * reboot 
  • Каждую пятницу в 17:00 выводить сообщение "Ура, пятница!"
* 17 * * 5 gdialog --msgbox "Ура, пятница!"
  • 15 числа каждого месяца ...
* * 15 * * ...
  • 31 декабря каждого года ...
* * 31 12 * ...

Графические интерфейсы

Gnome Shedule

Gnome Schedule

Графическая оболочка для cron, превращающая его в подобие Планировщика заданий Windows.

Пока отсутствует в ALT Linux.

Модуль Alterator

Планировался модуль для Alterator, но он еще не реализован.

Systemd

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

На системах с использованием Systemd можно использовать таймеры - файлы юнитов с суффиксом .timer. Они хранятся в тех же каталогах, что и другие файлы настроек юнитов, но включают в себя раздел [Timer], который определяет, как и когда таймер запускается.

Существует два типа таймеров:

  • Таймеры реального времени, которые запускаются в зависимости от событий календаря (как задания cron). Для определения таких таймеров используется опция OnCalendar=.
  • Монотонные таймеры, запускающиеся после определенного промежутка времени по отношению к той или иной отправной точке. Они не сработают, если компьютер находится в режиме ожидания или выключен. Есть несколько различных монотонных таймеров, но все они имеют вид: OnTypeSec=. Обычно монотонные таймеры включают в себя OnBootSec и OnUnitActiveSec.

1. Создаем Unit. Для примера foo.service

2. В том же каталоге, где находится служба, /etc/systemd/system, создается файл с расширением timer. В нашем примере foo.timer.

3. Файл с расширением .timer запускается и контролирует .service. .service не требует раздела [Install], так как последний присутствует в юните timer, который уже включен. Поэтому из файла service его можно убрать.

Примеры таймеров:

Монотонный таймер

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

/etc/systemd/system/foo.timer
[Unit]
Description=Run foo weekly and on boot

[Timer]
OnBootSec=15min
OnUnitActiveSec=1w 

[Install]
WantedBy=timers.target

Формат времени

  • usec, us, µs - мкс
  • msec, ms - мс
  • seconds, second, sec, s - сек
  • minutes, minute, min, m - мин
  • hours, hour, hr, h - ч
  • days, day, d - дни
  • weeks, week, w - недели
  • months, month, M (определен как 30.44 дней) - месяц
  • years, year, y (определен как 365.25 дней) - год

Таймер реального времени

Таймер, который будет запускаться один раз в неделю (в 12:00 в понедельник). При активации он сразу же запустит службу, если отсутствует последнее время запуска (опция Persistent=true), например, в связи с отключением системы:

/etc/systemd/system/foo.timer
[Unit]
Description=Run foo weekly

[Timer]
OnCalendar=weekly
Persistent=true     
 
[Install]
WantedBy=timers.target

Формат времени

Вместо словесного описания времени можно использовать цифровой.

  • minutely - ежеминутно → *-*-* *:*:00
  • hourly - ежечасно → *-*-* *:00:00
  • daily - ежедневно → *-*-* 00:00:00
  • monthly - ежемесячно → *-*-01 00:00:00
  • weekly - еженедельно → Mon *-*-* 00:00:00
  • yearly - ежегодно → *-01-01 00:00:00
  • quarterly - ежеквартально → *-01,04,07,10-01 00:00:00

Источники