Linux и UNIX: программирование в shell. Руководство разработчика. - страница 14
ГЛАВА 3
Выполнение команд в фоновом режиме
Когда вы работаете за терминалом, во многих случаях неудобен вывод на экране результатов выполнения заданий в системе, ведь в это время вы можете быть заняты другими важными делами, например просмотром сообщений электронной почты. Кроме того, иногда возникает необходимость выполнять задания, интенсивно использующие дисковые ресурсы или ресурсы центрального процессора, в то время, когда загрузка системы минимальна. Для этих целей специально разработаны команды, которые позволяют запускать задания в фоновом режиме, а не на экране терминала.
В этой главе рассматриваются следующие темы:
• планирование заданий с помощью программы cron;
• планирование заданий с помощью команды at;
• выполнение заданий в фоновом режиме;
• выполнение заданий с помощью команды nohup.
cron | Системный планировщик, применяемый для многократного выполнения заданий в указанные периоды времени; является демоном, т. е. работает только в фоновом режиме |
at | Команда, которая служит для однократного выполнения заданий в назначенное время |
& | Оператор, позволяющий перевести задание в фоновый режим |
nohup | Команда для перевода задания в фоновый режим таким образом, чтобы оно не реагировало на сигнал HUP (hang‑up -oтбой) и продолжало выполняться, даже если запустивший его пользователь выйдет из системы |
3.1. Планировщик cron и команда crontab
Программа cron является основным системным планировщиком, служащим для выполнения различных заданий в фоновом режиме. Команда crontab позволяет пользователям создавать, редактировать и удалять инструкции для программы cron посредством специального crontab–файла. У каждого пользователя может быть свой crontab–файл, но в крупных системах администратор (пользователь root) обычно исключает данную возможность. В этом случае администратор создает вспомогательные файлы cron.deny и cron.allow, содержащие списки пользователей, которым соответственно запрещено и разрешено выполнять команду crontab.
3.1.1. Структура crontab–файла
Чтобы планировать выполнение заданий в определенное время, нужно знать формат записей в crontab–файле. Каждая запись содержит шесть полей;
1 | Минуты — 0—59 |
2 | Часы — 0—23 (0 означает полночь) |
3 | День месяца — 1—31 |
4 | Месяц — 1—12 |
5 | День недели — 0—7 {0 и 7 означает воскресенье) |
6 | Команда, которая должна быть выполнена |
Общий формат записи таков:
минуты часы день_месяца месяц деиь_нвдели команда
Все поля разделяются пробелами.
В первых пяти полях записи могут быть указаны диапазоны значений. Например, для того чтобы обеспечить выполнение задания с понедельника по пятницу, надлежит указать в пятом поле значение 1-5,
Допускается также задание списка значений, разделенных запятыми. Если,
например, задание должно быть выполнено только в понедельник и четверг, следует
ввести 1, 4.
Символ звездочки (*) — это обозначение диапазона "от первого до последнего", т. е. каждую минуту, каждый день и т. д. Если указан диапазон, то можно задать для него шаг пропуска с помощью символа /. Например, запись */2 означает "каждый второй".
В crontab–файле допускаются комментарии. В начале строки комментария должен стоять символ #.
3.1.2. Примеры записей в crontab–файле
Запись
>30 21 * * * /apps/bin/cleanup.sh
означает выполнение сценария cteanup.sh в каталоге /apps/bin каждый вечер в 21:30. Запись
>45 4 1,10,22 * * /apps/bin/backup.sh
означает выполнение сценария backup.sh в каталоге /apps/bin в 4:45 утра 1–го, 10–го и 22–го числа каждого месяца. Запись
>10 1 * * 6,0 /bin/find -name "core" — exec rm {} \;
означает выполнение команды find для удаления файлов дампа в 1:10 ночи по субботам и воскресеньям. Запись
>0,30 18-23 * * * /apps/bin/dbcheck.sh
означает выполнение сценария dbchecksh в каталоге /apps/bin каждые полчаса между 18:00 и 23:00.
Запись
>0 23 * * 6 /apps/bin/qtrend.sh
означает выполнение сценария qtrend.sh в каталоге /apps/bin в 23:00 каждую субботу. При выполнении команд и сценариев, указанных в crоntab–файле, следует убедиться, что корректно заданы все необходимые переменные среды. Программа cron не сделает это за вас: это не входит в ее компетенцию. Поэтому локальные переменные среды должны быть установлены вручную, в отличие от глобальных переменных, которые устанавливаются автоматически. Данная задача может быть решена непосредственно в crontab–файле за счет создания записи следующего вида: