Администрирование систем 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 позволяет выполнить сценарий в заданной директории.
http://rus-linux.net/MyLDP/BOOKS/LSA/ch16.html
|