Библиотека сайта rus-linux.net
Администрирование систем Linux. Планирование исполнения задач
Оригинал: SchedulingАвтор: Paul Cobbaut
Дата публикации: 12 марта 2015 г.
Перевод: A. Панин
Дата перевода: 31 марта 2015 г.
Часть IV. Управление системой
Глава 16. Планирование исполнения задач
Администраторы систем Linux используют демон atd
для планирования однократного исполнения задач. Многократное исполнение задач удобнее планировать с помощью демона crond
. В двух следующих разделах мы обсудим оба упомянутых инструмента.
16.1. Планирование однократного исполнения задач с помощью демона atd
16.1.1. Утилита at
Простое планирование исполнения задачи может осуществляться с помощью утилиты at
. В данном примере показана методика планирования исполнения команды date в 22:01 и команды sleep в 22:03.
root@laika:~# at 22:01 at> date at> <EOT> job 1 at Wed Aug 1 22:01:00 2007 root@laika:~# at 22:03 at> sleep 10 at> <EOT> job 2 at Wed Aug 1 22:03:00 2007 root@laika:~#
В реальной жизни, надеюсь, вы будете планировать исполнение более полезных команд :-)
16.1.2. Утилита atq
Проверка установленного для исполнения задач времени может осуществляться достаточно просто с помощью команды atq
или at -l
.
root@laika:~# atq 1 Wed Aug 1 22:01:00 2007 a root 2 Wed Aug 1 22:03:00 2007 a root root@laika:~# at -l 1 Wed Aug 1 22:01:00 2007 a root 2 Wed Aug 1 22:03:00 2007 a root root@laika:~#
Утилита at принимает в качестве меток времени такие английские слова, как tomorrow и teatime, которые позволяют запланировать исполнение команды на следующий день и на четыре часа вечера соответственно.
root@laika:~# at 10:05 tomorrow at> sleep 100 at> <EOT> job 5 at Thu Aug 2 10:05:00 2007 root@laika:~# at teatime tomorrow at> tea at> <EOT> job 6 at Thu Aug 2 16:00:00 2007 root@laika:~# atq 6 Thu Aug 2 16:00:00 2007 a root 5 Thu Aug 2 10:05:00 2007 a root root@laika:~#
16.1.3. Утилита atrm
Запланированные к исполнению задачи могут быть удалены из очереди с помощью утилиты atrm
.
root@laika:~# atq 6 Thu Aug 2 16:00:00 2007 a root 5 Thu Aug 2 10:05:00 2007 a root root@laika:~# atrm 5 root@laika:~# atq 6 Thu Aug 2 16:00:00 2007 a root root@laika:~#
16.1.4. Файлы конфигурации at.allow и at.deny
Также вы можете использовать файлы конфигурации /etc/at.allow
и /etc/at.deny
для четкого указания пользователей, которые могут или не могут планировать исполнение задач с помощью демона atd.
Файл /etc/at.allow
может содержать список пользователей, которым позволено осуществлять планирование исполнения задач с помощью демона atd
. В том случае, если файла /etc/at.allow
не существует, демон atd
может использоваться любым пользователем, имя которого не внесено в файл /etc/at.deny
.
Если же не существует ни одного из этих файлов, то демон atd
по прямому назначению может использовать любой пользователь.
16.2. Планирование многократного исполнения задач с помощью демона crond
16.2.1. Файл конфигурации crontab
Команда crontab(1)
может использоваться для модификации файла конфигурации crontab(5)
. Каждый пользователь может использовать свой файл конфигурации crontab для планирования исполнения задач в определенное время. Это время может быть задано с помощью значений в пяти полях в следующем порядке: минуты, часы, день месяца, месяц и день недели. В том случае, если поле содержит символ звездочки (*), считается, что в этом поле записаны все доступные значения.
Приведенная в примере ниже запись означает следующее: необходимо исполнять сценарий с именем script42 в два часа и восемь минут дня каждый месяц и каждый день недели.
8 14 * * * script42
Исполнение сценария с именем script8472 каждый месяц первого числа в 25 минут поле полуночи.
25 0 1 * * script847
Исполнение сценария с именем script33 через каждые две минуты в воскресенье (воскресенью соответствует как значение 0, так и значение 7).
*/2 * * * 0
Вместо значений в этих пяти полях вы также можете использовать одну из следующих директив: @reboot (перезагрузка), @yearly или @annually (ежегодно), @monthly (ежемесячно), @weekly (еженедельно), @daily или @midnight (ежедневно), @hourly (ежечасно).
16.2.2. Команда crontab
Пользователи не должны непосредственно редактировать файл crontab; вместо этого они должны использовать команду crontab -e
, которая приведет к открытию текстового редактора, путь к которому задан с помощью переменной окружения EDITOR или VISUAL. Пользователи могут выводить содержимое своих таблиц задач демона crond с помощью команды crontab -l
.
16.2.3. Файлы конфигурации cron.allow и cron.deny
Демон crond
читает таблицы задач, принимая во внимание содержимое файлов конфигурации /etc/cron.allow
и /etc/cron.deny
.
Эти файлы оказывают точно такое же влияние на процесс планирования задач, как и файлы at.allow
и at.deny
. В том случае, если файл cron.allow
существует, ваше имя пользователя должно быть занесено в него, ведь в противном случае вы не сможете воспользоваться демоном crond
. В том же случае, если файла cron.allow
не существует, вашего имени пользователя не должно быть в файле cron.deny
в том случае, если вы планируете пользоваться демоном crond
.
16.2.4. Файл конфигурации /etc/crontab
Файл конфигурации /etc/crontab
содержит информацию о задачах, которые должны исполняться ежечасно/ежедневно/еженедельно/ежегодно. Его содержимое выглядит аналогично содержимому, представленному в примере ниже.
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 20 3 * * * root run-parts --report /etc/cron.daily 40 3 * * 7 root run-parts --report /etc/cron.weekly 55 3 1 * * root run-parts --report /etc/cron.monthly
16.2.5. Директории /etc/cron.*
Директории, перечисленные в следующем примере, содержат описания задач, которые должны исполняться в моменты времени, описанные в файле конфигурации /etc/crontab
. Директория /etc/cron.d
предназначена для специальных случаев, когда при планировании исполнения задач требуется более гибкое описание периодов времени, чем ежечасно/ежедневно/еженедельно/ежемесячно.
paul@laika:~$ ls -ld /etc/cron.* drwxr-xr-x 2 root root 4096 2008-04-11 09:14 /etc/cron.d drwxr-xr-x 2 root root 4096 2008-04-19 15:04 /etc/cron.daily drwxr-xr-x 2 root root 4096 2008-04-11 09:14 /etc/cron.hourly drwxr-xr-x 2 root root 4096 2008-04-11 09:14 /etc/cron.monthly drwxr-xr-x 2 root root 4096 2008-04-11 09:14 /etc/cron.weekly
16.2.6. Файл /etc/anachrontab
Обратите внимание на то, что в дистрибутиве Red Hat для планирования ежедневного, еженедельного и ежемесячного исполнения задач с помощью демона crond используется файл anacrontab
.
root@rhel65:/etc# cat 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 root@rhel65:/etc#
16.3. Практическое задание: планирование исполнения задач
-
1. Запланируйте исполнение двух задач с помощью утилиты
at
, выведитеочередь задач демона atd
и удалите задачу из нее. -
2. Работая с учетной записью обычного пользователя, используйте команду
crontab -e
для планирования исполнения сценария через каждые четыре минуты. -
3. Работая с учетной записью пользователя root, выведите содержимое файла
crontab
, принадлежащего обычному пользователю. -
4. Снова перейдя к использованию учетной записи обычного пользователя, удалите ваш файл
crontab
. -
5. Рассмотрите используемые демоном
crond
файлы и поддиректории в директории/etc
и попытайтесь разобраться с их назначением. Какое действие выполняется с помощью командыrun-parts
?
16.4. Корректная процедура выполнения практического задания: планирование исполнения задач
-
1. Запланируйте исполнение двух задач с помощью утилиты
at
, выведитеочередь задач демона atd
и удалите задачу из нее. -
root@rhel55 ~# at 9pm today at> echo пора идти спать >> /root/todo.txt at> <EOT> job 1 at 2010-11-14 21:00 root@rhel55 ~# at 17h31 today at> echo время для ланча >> /root/todo.txt at> <EOT> job 2 at 2010-11-14 17:31 root@rhel55 ~# atq 2 2010-11-14 17:31 a root 1 2010-11-14 21:00 a root root@rhel55 ~# atrm 1 root@rhel55 ~# atq 2 2010-11-14 17:31 a root root@rhel55 ~# date Вс ноя 14 17:31:01 CET 2010 root@rhel55 ~# cat /root/todo.txt время для ланча
-
2. Работая с учетной записью обычного пользователя, используйте команду
crontab -e
для планирования исполнения сценария через каждые четыре минуты. -
paul@rhel55 ~$ crontab -e no crontab for paul - using an empty one crontab: installing new crontab
-
3. Работая с учетной записью пользователя root, выведите содержимое файла
crontab
, принадлежащего обычному пользователю. -
root@rhel55 ~# crontab -l -u paul */4 * * * * echo `date` >> /home/paul/crontest.txt
-
4. Снова перейдя к использованию учетной записи обычного пользователя, удалите ваш файл
crontab
. -
paul@rhel55 ~$ crontab -r paul@rhel55 ~$ crontab -l no crontab for paul
-
5. Рассмотрите используемые демоном
crond
файлы и поддиректории в директории/etc
и попытайтесь разобраться с их назначением. Какое действие выполняется с помощью командыrun-parts
? -
Команда
run-parts
позволяет выполнить сценарий в заданной директории.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 15. Инициализация системы и уровни исполнения | Глава 17. Журналирование событий |