Планирование задач
Основные планировщики
Наиболее распространенным планировщиком является cron
cron - демон, который запускает процессы на основании заданной регулярности
Работает с различными конфигурационными файлами, определяющими, когда процесс должен быть запущен
At используется для разовой задачи
Альтернативно можно использовать systemd таймеры
Описание cron
Пользовательские задачи для cron задаются командой crontab -e
Задается для того пользователя, из под которого запущен планировщик
Базовые параметры хранятся в /etc/cron.d
Устаревший путь - /etc/crontab, он более не используется
Cron оперирует скриптами, которые запускаются на принципах временного повторения (час, день, неделя, месяц)
[root@centos8 ~]# ls /etc/cron
cron.d/ cron.daily/ cron.deny cron.hourly/ cron.monthly/ crontab cron.weekly/
[root@centos8 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
Описание anacron
Anacron - сервис, который связан с cron, и отслеживающий задачи, для которых не указано специфичное время
Anacron обрабатывает задачи в /etc/cron.{hourly,daily,weekly,monthly}
Настройки хранятся в /etc/anacrontab
[root@centos8 ~]# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
Планирование с cron
Выбрать опцию для создания планировщика
Запустить через crontab -e
Создать cron файл в /etc/cron.d
Настроить необходимое время:
*/ 10 4 11 12 1-5
минута (*/10)
час (4)
день месяца (11)
месяц (12)
день недели (1-5)
Cron не имеет STDOUT, любая такая команда приведет к ошибке
Документация по cron доступна в man 5 crontab
Systemd таймеры
Таймеры также выполняют задачи, которые может планировать cron
Получает все большее распространение, но cron все еще является стандартом
Документация доступна в:
man 7 systemd-timer для общей информации
man 7 systemd-time для спецификации форматов времени
[root@centos8 ~]# ls /usr/lib/systemd/system | grep timer
chrony-dnssrv@.timer
dnf-makecache.timer
fstrim.timer
mdadm-last-resort@.timer
mdcheck_continue.timer
mdcheck_start.timer
mdmonitor-oneshot.timer
mlocate-updatedb.timer
systemd-tmpfiles-clean.timer
timers.target
timers.target.wants
unbound-anchor.timer
Таймер сопровождается сервисом, который определяет как и что запускать
[root@centos8 ~]# cat /usr/lib/systemd/system/fstrim.timer
[Unit]
Description=Discard unused blocks once a week
Documentation=man:fstrim
[Timer]
OnCalendar=weekly
AccuracySec=1h
Persistent=true
[Install]
WantedBy=timers.target
[root@centos8 ~]# cat /usr/lib/systemd/system/fstrim.service
[Unit]
Description=Discard unused blocks
[Service]
Type=oneshot
ExecStart=/usr/sbin/fstrim -av
Запускать при необходимости нужно таймер, который уже будет ждать, когда нужно запустить сервис
[root@centos8 ~]# systemctl status fstrim.service
● fstrim.service - Discard unused blocks
Loaded: loaded (/usr/lib/systemd/system/fstrim.service; static; vendor preset: disabled)
Active: inactive (dead)
[root@centos8 ~]# systemctl enable fstrim.timer
Created symlink /etc/systemd/system/timers.target.wants/fstrim.timer → /usr/lib/systemd/system/fstrim.timer.
[root@centos8 ~]# systemctl start fstrim.timer
[root@centos8 ~]# systemctl status fstrim.timer
● fstrim.timer - Discard unused blocks once a week
Loaded: loaded (/usr/lib/systemd/system/fstrim.timer; enabled; vendor preset: disabled)
Active: active (waiting) since Mon 2020-03-02 21:50:52 MSK; 6s ago
Trigger: Mon 2020-03-09 00:00:00 MSK; 6 days left
Docs: man:fstrim
Mar 02 21:50:52 centos8 systemd[1]: Started Discard unused blocks once a week.
Использование at
Для использования at необходим запущенный сервис atd
at <time> планирует задачу
Здесь же задаются параметры задачи в интерактивной оболочке
Ctrl+D закрывает оболочку
atq покажет список запланированных задач
atrm снимет задачи со списка
[root@centos8 ~]# systemctl status atd
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-02-14 20:35:45 MSK; 2 weeks 3 days ago
Main PID: 1191 (atd)
Tasks: 1
Memory: 508.0K
CGroup: /system.slice/atd.service
└─1191 /usr/sbin/atd -f
Feb 14 20:35:45 centos8 systemd[1]: Started Job spooling tools.
[root@centos8 ~]# at 22:00
warning: commands will be executed using /bin/sh
at> logger hello
at> <EOT>
job 1 at Mon Mar 2 22:00:00 2020
Управление временными файлами
Для управления временными файлами используетс служба systemd-tmpfiles
Директория /usr/lib/tmpfiles.d управляет настройками для создания, удаления и очистки временных файлов
Таймер systemd-tmpfiles-clean.timer может быть использован для автоматической очистки временных файлов
Он запускает systemd-tmpfiles-clean.service
Этот сервис в свою очередь запускает systemd-tmpfiles --clean
Файл /usr/lib/tmpfiles.d/tmp.conf содержит настройки для автоматической очистки
При изменении настроек необходимо скопировать файл в /etc/tmpfiles.d
После исполнить systemd-tmpfiles --clean etc/tmpfiles.d/tmp.conf для проверки на ошибки
tmp.conf содержит информацию о директориях для мониторинга, разрешениях на нее, владельцев и через сколько времени в отсутствии изменений удалять файлы
man tmpfiles.d содержит необходимую документацию
Важно не только правильно написать конфигурацию, но учитывать временные параметры в таймере systemd
[root@centos8 ~]# cat /usr/lib/tmpfiles.d/tmp.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
# See tmpfiles.d(5) for details
# Clear tmp directories separately, to make them easier to override
q /tmp 1777 root root 10d
q /var/tmp 1777 root root 30d
# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp
# Remove top-level private temporary directories on each boot
R! /tmp/systemd-private-*
R! /var/tmp/systemd-private-*
Last updated
Was this helpful?