Планировщик заданий
В 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 Schedule
Графическая оболочка для cron, превращающая его в подобие Планировщика заданий Windows.
Пока отсутствует в ALT Linux.
Модуль Alterator
Планировался модуль для Alterator, но он еще не реализован.
Systemd
На системах с использованием 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