Планирование процессов
Используйте незанятое время!
Система Linux может выдерживать сильную нагрузку, но обычно перегружается только в рабочее время. Будь это офис, серверная комната или дом, большинство систем Linux тратят попусту время утром, вечером, ночью и в выходные. Использование этого незанятого времени может быть намного дешевле, чем покупка компьютеров, которые вам точно потребуются, если вы захотите все делать в одно и то же время.Существует три типа для задержки выполнения работ:
- Небольшое ожидание, а затем возобновление выполнения задания, это делается командой sleep. Время запуска задания зависит от системного времени в момент подачи команды.
- Выполнение команды в определенное время, используя команду at. Выполнение задания(ий) зависит от системного времени, а не от времени подачи команды.
- Регулярный запуск команд по месяцам, неделям, дням или часам основано на использовании возможностей cron.
Команда sleep
Info-страница о сне, вероятно, одна из самых коротких. Все, что sleep делает, это ждет. По умолчанию время ожидания выражается в секундах.Так зачем же она нужна? Некоторые практические примеры:
Кто-то звонит вам по телефону, вы говорите "Да, мы встретимся через полчаса", но вы тонете в работе и забываете про свой ланч:
(sleep 1800; echo "Lunch time..") &
Если вы не можете по какой-то причине использовать команду at, 5:00 часов, и вы хотите идти домой, но еще есть работа, которую предстоит сделать, а сейчас кто-то использует системные ресурсы:
(sleep 10000; myprogram) &
Убедитесь, что в вашей системе есть авто-выход, и что вы выходите из системы или блокируется ваш рабочий стол при подаче такого рода задания, или запустите ее в сессии.
Когда вы запускаете на распечатку ряд больших файлов, но вы хотите, чтобы другие пользователи имели возможность печати между ними:
lp lotoftext; sleep 900; lp hugefile; sleep 900; lp anotherlargefile
Печать файлов обсуждается в Главе 8, Принтеры и печать.
Программисты часто используют команду sleep для остановки выполнения скрипта или программы на определенное время.
Команда at
Команда at выполняет команды в данный момент времени, используя вашу оболочку по умолчанию, если вы не укажете команде иное (см. man-страницу).Опции at достаточно понятны, что продемонстрировано в примере ниже:
steven@home:~> at tomorrow + 2 days warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh at> cat reports | mail myboss@mycompany at> job 1 at 2001-06-16 12:36Нажатие Ctrl + D завершает работу утилиты at и создает сообщение "EOT".
Пользователь steven делает здесь странные вещи, объединяя две команды; мы будем изучать подобную практику в Главе 5, Перенаправление ввода-вывода.
steven@home:~> at 0237 warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh at> cd new-programs at> ./configure; make at> job 2 at 2001-06-14 02:00Опция -m отправляет сообщение пользователю, когда задание выполнено, или разъяснение, когда работа не может быть сделана. Команда atq создает список заданий; выполните эту команду перед отправкой заданий в целях предотвращения их от запуска одновременно с другими. Командой atrm можно удалить запланированные задания, если вы изменили свою точку зрения.
Хорошая идея выбрать необычное время выполнения, потому что системные задания часто работают "круглые" часы, как вы можете увидеть в Разделе "Cron и crontab" далее. Например, задания часто запускаются ровно в 1:00 утра (например, системы, индексирующие обновление стандартной локальной базы данных), поэтому ввод времени 0100 легко может замедлить работу системы, а не увеличить ее. Чтобы предотвратить задания от запуска всех в одно и то же время, вы можете также использовать команду batch, которая ставит процессы в очередь и задает работу системе сбалансированным образом, предотвращая чрезмерные очереди использования системных ресурсов. Смотрите info-страницы для получения дополнительной информации.
Cron и crontab
Система cron находится под управлением демона cron. Он получает информацию из записей crontab системы и пользователей о том, какие программы и когда должны работать. Только пользователь root имеет доступ к системным crontab, в то время как у каждого пользователя должен быть доступ только к собственным crontab. На некоторых системах у (некоторых) пользователей отсутствует доступ к объекту cron.При запуске системы демон cron ищет /var/spool/cron/ на наличие записей crontab, названных в честь аккаунтов в /etc/passwd, он ищет /etc/cron.d/ и /etc/crontab, а затем ежеминутно использует эту информацию для проверки, есть ли что-то что нужно сделать. Он выполняет команды от пользователя, который является собственником файла crontab и отправляет владельцу на mail все выданные команды.
В системах, использующих хрон Vixie, задания, которые выполняются ежечасно, ежедневно, еженедельно и ежемесячно хранятся в отдельной директории в /etc чтобы было легче просматривать. Это отличается от стандартной функции хрон UNIX, где все задачи вводятся в один большой файл.
Пример файла crontab Vixie:
[root@blob /etc]# more crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts # commands to execute every hour 01 * * * * root run-parts /etc/cron.hourly # commands to execute every day 02 4 * * * root run-parts /etc/cron.daily # commands to execute every week 22 4 * * 0 root run-parts /etc/cron.weekly commands to execute every month 42 4 1 * * root run-parts /etc/cron.monthly
Альтернатива.
Вы можете также использовать команду crontab -l для отображения всех файлов crontab.
После установки некоторых переменных, появляется текущее расписание,
по одной строке на задание, начинающиеся с 5-ти полей даты и времени.
Первое поле содержит минут (от 0 до 59), второе - определяет час
исполнения (0-23), третее - день месяца (1-31), и, наконец, номер месяца
(1-12) , последнее - день недели (0-7, где 0 и 7 - это воскресенье).
Звездочка в этих полях обозначает общий предел для поля. Списки
допускаются; для выполнения заданий с понедельника по пятницу введите
1-5 в последнем поле, чтобы выполнить работу в понедельник, среду и
пятницу введите 1,3,5.Вы можете также использовать команду crontab -l для отображения всех файлов crontab.
Затем указывается пользователь, который должен выполнить процессы, которые перечислены в последнем столбце. Пример выше из конфигурации хрона Vixie, где root запускает программу run-parts на регулярной основе с соответствующими каталогами в качестве опций. В этих каталогах фактические задания для выполнения в назначенное время хранятся в виде скриптов, как этот маленький скрипт, который выполняется ежедневно, чтобы обновить базу данных, используемую командой locate:
billy@ahost cron.daily]$ cat slocate.cron #!/bin/sh renice +19 -p $$ >/dev/null 2>&1 /usr/bin/updatedb -f "nfs,smbfs,ncpfs,proc,devpts" -e \ "/tmp,/var/tmp, /usr/tmp,/afs,/net"Пользователи должны отредактировать для своих crontab безопасный способ использования команды crontab -e. Это позволит предотвратить пользователя от случайного открытия более чем одной копии его/ее файла crontab. По умолчанию предоставлен редактор vi (см. Главу 6, Текстовые редакторы), но вы можете использовать любой текстовый редактор, такой как gvim или gedit, если вам более комфортно с редактором GUI.
При выходе система сообщит вам, что установлен новый crontab.
Эта запись crontab напоминает billy пойти в его спортивный клуб каждый вечер четверга:
billy:~> crontab -l # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.20264 installed on Sun Jul 20 22:35:14 2003) # (Cron version -- $Id: chap4.xml,v 1.28 2007/09/19 12:22:26 tille Exp $) 38 16 * * 3 mail -s "sports evening" billyПосле добавления нового запланированного задания, система сообщит вам, что новый crontab установлен. Вам не нужно перезапустить демон cron, чтобы изменения вступили в силу. В примере billy добавил новую строку, указывающую на сценарий резервного копирования:
billy:~> crontab -e 45 15 * * 3 mail -s "sports evening" billy 4 4 * * 4,7 /home/billy/bin/backup.sh <--write and quit--> crontab: installing new crontab billy:~>Скрипт backup.sh запускается каждые четверг и воскресенье. См. Раздел "Сценарии оболочки" для введения в написание скриптов для оболочки. Имейте в виду, что вывод команд, если таковые имеются, отправляются по почте владельцу файла crontab. Если почтовая служба не настроена, можно найти вывод ваших команд в вашем локальном почтовом ящике, /var/spool/mail/, в виде обычного текстового файла.
Кто запускает мои команды?
Вы не можете устанавливать пользователей, которые должны выполнять команды. Они выполняются с полномочиями пользователя по умолчанию.
Вы не можете устанавливать пользователей, которые должны выполнять команды. Они выполняются с полномочиями пользователя по умолчанию.