Наши партнеры

UnixForum





Библиотека сайта 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. Журналирование событий