Планировщик заданий: различия между версиями
(Новая страница: «{{stub}} {{Category navigation|title=Petr-akhlamov/Мысли о миграции|category=Petr-akhlamov/Мысли о миграции|sortkey={{SUBPAGENAME}}}}») |
|||
(не показано 16 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
{{stub}} | {{stub}} | ||
В Windows-системах начиная с Windows 95 есть утилита Планировщик зданий, которая позволяет запланировать запуск программ или скриптов в определенные моменты времени с определенным интервалом. В мире UNIX тоже есть подобная утилита и называется она '''Cron'''. | |||
=Cron= | |||
Cron работает как демон и выполняет действия в определенное время, которые описаны в конфигурационных файлах. | |||
Но, обо всем по порядку. | |||
==Как работать с утилитой== | |||
Настройки cron хранятся в /etc/crontab. И, теоретически, можно добавить задание отредактировав данный файл. Но, рекомендуется использовать утилиту crontab. | |||
<pre>crontab -e</pre> | |||
У вас откроется в редакторе (nano) следующий временный файл: | |||
<source lang="ini"> | |||
#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 | |||
~ | |||
~ | |||
~ | |||
</source> | |||
После завершения редактирования правила будут добавлены в '''/var/spool/cron/crontabs/имя_пользователя''' и выполняться команды будут от имени пользователя. | |||
Если вам надо сделать план на всю систему, то нужно запустить редактор cron от суперпользователя. | |||
<pre> | |||
su- | |||
crontab -e | |||
</pre> | |||
После завершения работы команды cron файл будет обработан и все правила будут добавлены в '''/var/spool/cron/crontabs/имя_пользователя''', причем, добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли. | |||
===Синтаксис=== | |||
Синтаксис правила выглядит так: | |||
'''минута''' ''час'' день '''месяц''' ''день_недели'' /путь/к/исполняемому/файлу | |||
*минута - от 0 до 59 | |||
*час - от 0 до 23 | |||
*день - от 1 до 31 | |||
*месяц - от 1 до 12 | |||
*день недели - от 1 до 7 | |||
*путь к исполняемому файлу - путь к программе или скрипту, должен указываться всегда полностью | |||
*звездочка вместо значения означает выполнение команды каждый(-ую) минуту/час/день/день недели | |||
Для некоторых часто используемых наборов были созданы переменные: | |||
*@reboot - при загрузке, только один раз | |||
*@yearly, @annually - раз год | |||
*@monthly - раз в месяц | |||
*@weekly - раз в неделю | |||
*@daily, @midnight - каждый день | |||
*@hourly - каждый час | |||
===Команды=== | |||
====Просмотреть задачи==== | |||
<pre>crontab -l</pre> | |||
====Удалить все задачи==== | |||
<pre>crontab -r</pre> | |||
===Примеры команд=== | |||
*Каждый день в 12:30 перезагружать компьютер | |||
<pre>30 12 * * * reboot </pre> | |||
*Каждую пятницу в 17:00 выводить сообщение "Ура, пятница!" | |||
<pre>* 17 * * 5 gdialog --msgbox "Ура, пятница!"</pre> | |||
*15 числа каждого месяца ... | |||
<pre>* * 15 * * ...</pre> | |||
*31 декабря каждого года ... | |||
<pre>* * 31 12 * ...</pre> | |||
==Графические интерфейсы== | |||
[[Файл:Gnome-schedule.png|мини|Gnome Shedule]] | |||
===Gnome Schedule=== | |||
Графическая оболочка для cron, превращающая его в подобие Планировщика заданий Windows. | |||
Пока отсутствует в ALT Linux. | |||
*({{altbug|37388}}) | |||
===Модуль Alterator=== | |||
[[Alterator/module_new|Планировался модуль]] для Alterator, но он еще не реализован. | |||
=Systemd= | |||
{{stub}} | |||
На системах с использованием Systemd можно использовать таймеры - файлы юнитов с суффиксом .timer. Они хранятся в тех же каталогах, что и другие файлы настроек юнитов, но включают в себя раздел '''[Timer]''', который определяет, как и когда таймер запускается. | |||
Существует два типа таймеров: | |||
*'''Таймеры реального времени''', которые запускаются в зависимости от событий календаря (как задания cron). Для определения таких таймеров используется опция '''OnCalendar='''. | |||
*'''Монотонные таймеры''', запускающиеся после определенного промежутка времени по отношению к той или иной отправной точке. Они не сработают, если компьютер находится в режиме ожидания или выключен. Есть несколько различных монотонных таймеров, но все они имеют вид: ''OnTypeSec=''. Обычно монотонные таймеры включают в себя '''OnBootSec''' и '''OnUnitActiveSec'''. | |||
1. [[Создание сервиса systemd|Создаем Unit]]. Для примера '''foo.service''' | |||
2. В том же каталоге, где находится служба, ''/etc/systemd/system'', создается файл с расширением ''timer''. В нашем примере '''foo.timer'''. | |||
3. Файл с расширением ''.timer'' запускается и контролирует ''.service''. ''.service'' не требует раздела [Install], так как последний присутствует в юните timer, который уже включен. Поэтому из файла service его можно убрать. | |||
Примеры таймеров: | |||
==Монотонный таймер== | |||
Таймер, который запустится через 15 минут после загрузки, а затем снова будет запускаться каждую неделю во время работы системы. | |||
<source lang="ini">/etc/systemd/system/foo.timer</source> | |||
<source lang="ini"> | |||
[Unit] | |||
Description=Run foo weekly and on boot | |||
[Timer] | |||
OnBootSec=15min | |||
OnUnitActiveSec=1w | |||
[Install] | |||
WantedBy=timers.target | |||
</source> | |||
===Формат времени=== | |||
*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'''), например, в связи с отключением системы: | |||
<source lang="ini">/etc/systemd/system/foo.timer</source> | |||
<source lang="ini"> | |||
[Unit] | |||
Description=Run foo weekly | |||
[Timer] | |||
OnCalendar=weekly | |||
Persistent=true | |||
[Install] | |||
WantedBy=timers.target | |||
</source> | |||
===Формат времени=== | |||
Вместо словесного описания времени можно использовать цифровой. | |||
*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 | |||
=Источники= | |||
*[https://losst.ru/nastrojka-cron losst.ru] | |||
*[https://wiki.archlinux.org/title/Systemd_(Русский)/Timers_(Русский) wiki.archlinux.org] | |||
{{Category navigation|title=Petr-akhlamov/Мысли о миграции|category=Petr-akhlamov/Мысли о миграции|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=Petr-akhlamov/Мысли о миграции|category=Petr-akhlamov/Мысли о миграции|sortkey={{SUBPAGENAME}}}} | ||
[[Категория:Хорошо бы сделать пакет]] |
Текущая версия от 15:15, 31 мая 2022
В 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