Планировщик заданий: различия между версиями

Материал из ALT Linux Wiki
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
{{stub}}
{{stub}}
В Windows-системах начиная с Windows 95 есть утилита Планировщик зданий, которая позволяет запланировать запуск программ или скриптов в определенные моменты времени с определенным интервалом. В мире UNIX тоже есть подобная утилита и называется она '''Cron'''.
В Windows-системах начиная с Windows 95 есть утилита Планировщик зданий, которая позволяет запланировать запуск программ или скриптов в определенные моменты времени с определенным интервалом. В мире UNIX тоже есть подобная утилита и называется она '''Cron'''.
=Cron=


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


У вас откроется в редакторе (nano) следующий временный файл:
У вас откроется в редакторе (nano) следующий временный файл:
<pre>
<source lang="ini">
#minute (0-59),
#minute (0-59),
#|      hour (0-23),
#|      hour (0-23),
Строка 21: Строка 22:
~
~
~
~
</pre>
</source>


После завершения редактирования правила будут добавлены в '''/var/spool/cron/crontabs/имя_пользователя''' и выполняться команды будут от имени пользователя.
После завершения редактирования правила будут добавлены в '''/var/spool/cron/crontabs/имя_пользователя''' и выполняться команды будут от имени пользователя.
Строка 80: Строка 81:
[[Alterator/module_new|Планировался модуль]] для 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://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

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

Источники