3.1.3. Опции команды crontab
Общий формат команды crontab таков:
crontab [-u пользователь] — e -l -r
ОПЦИЯ
назначение
-u пользователь
Установка имени пользователя, для которого нужно создать
crontab–файл
-e
Активизация режима редактирования crontab–файла
-1
Отображение содержимого crontab–файла
-r
Удаление crontab–файла
Если вы хотите работать с собственным crontab–файлом, то указывать опцию — и нет необходимости.
3.1.4. Создание crontab–файла
Сначала, еще до того, как crontab–файл будет помещен в очередь заданий программы cron, необходимо установить переменную среды editor. Благодаря этому планировщик получит указание относительно того, какой редактор следует использовать при обработке crontab–файлов. Если вы предпочитаете редактор vi, откройте файл .profile или .bash_profile, находящийся в вашем начальном каталоге, и поместите в него следующие команды:
EDITOR=vi; export EDITOR
Далее создайте новый файл <имя_полъзователя>cron, где <имя_польэователя> — ваше регистрационное имя. Вот пример содержимого такого файла:
• вывод текущей даты на экран
• каждые 15 минут между 18:00 и 6:00
0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console
Приведенная выше запись задает отображение на экране текущей даты каждые 15 минут в указанном интервале времени. Теперь, если система вдруг "зависнет", вы сможете определить, когда это произошло.
Чтобы поместить в очередь заданий планировщика cron свой crontab–файл, выполните команду crontab, указав в ней имя созданного файла:
$ crontab davecron
Копия файла будет помещена в каталог /var/spool/cron, а имя копии совпадет с вашим регистрационным именем (в данном случае — dave).
3.1.5. Вывод на экран содержимого crontab–файла
Для вывода на экран содержимого crontab–файла предназначена команда crontab -l:
$ crontab -l
#(davecron installed on Tue Kay 4 13:07:43 1999)
#вывод текущей даты на экран
#каждые 15 минут между 18:00 и 6:00
0,15,30,45 18-06 * * * /bin/echo "date" > /dev/console
Вот как легко можно создать резервную копию crontab–файла в своем начальном каталоге:
$ crontab -1 > $HOME/davecron
3.1.6. Редактирование crontab–файла
Для добавления, редактирования или удаления записей в crontab–файле используется тот редактор, который указан в переменной среды editor. Чтобы отредактировать файл, выполните команду
$ crontab -e
При сохранении файла программа cron проверяет значения полей и информирует пользователя об обнаруженных ошибках. Если какая‑либо запись содержит ошибку, файл не будет принят.
В процессе редактирования crontab–файла можно добавлять в него новые записи. Добавим, например, следующую запись:
• удаление файлов дампа в 3.30 утра в 1–й, 7–й, 14–й,
• 21–й и 2б–й день каждого месяца
30 3 1,7,14,21,26 * * /bin/find -name "core" — exec rm {} \;
Желательно размещать перед каждой записью комментарий, объясняющий ее назначение.
Теперь сохраним файл, выйдем из редактора и проверим результат:
$ crontab -1
#(davecron installed on Tue May 4 13:07:43 1999)
#вывод текущей даты на экран
#каждые 15 минут между 18:00 и 6:00
0,15,30,45 18-06 * * * /bin/echo "date" > /dev/console
#удаление файлов дампа в 3.30 утра в 1–й, 7–й, 14–й,
#21–й и 26–й день каждого месяца
30 3 1,7,14,21,26 * * /bin/find -name "core" — exec rm {} \;
3.1.7. Удаление crontab–файла
Для удаления своего crontab–файла введите команду $ crontab -r
3.1.8. Восстановление утерянного crontab–файла
Если crontab–файл случайно удален, инсталлируйте заново исходный файл из вашего начального каталога:
$ crontab <имя_файла>
Именно по этой причине в документации к программе cron говорится о том, что не рекомендуется прибегать к непосредственному редактированию crontab–файла. Следует вносить все изменения в копию файла и инсталлировать ее заново.
3.2. Команда at
Команда at позволяет передавать задания демону cron для одноразового выполнения в назначенное время. Выдавая задание, команда at сохраняет в отдельном файле как его текст, так и все текущие переменные среды. Заметим, что команда crontab не делает этого. По умолчанию все результаты выполнения задания направляются пользователю в виде электронного сообщения.
Как и в случае с программой cron, пользователь root может контролировать, кому разрешено или запрещено выполнять команду at. Соответствующие списки пользователей содержатся в файлах at.allow и at.deny, находящихся в каталоге /etc.
Базовый формат команды at таков:
at [-f файл] [-l -d -m] время
Опция
Назначение
-f файл
Список заданий должен быть взят из указанного файла
-l
Вывод на экран списка заданий, которые ожидают выполнения; аналогична команде atq
-d
Удаление задания с указанным номером; аналогична команде atrm (в некоторых системах заменяется опцией -r)
-m
Выдача пользователю электронного сообщения о завершении задания
время
Спецификация времени, когда будет выполнено задание. Эта спецификация может быть довольно сложной. Допускается указание не только времени в формате часы: минуты, но и даты, а также многочисленных ключевых слов, таких как названия дней недели, месяцы, наречий today (сегодня), tomorrow (завтра), now (сейчас) и др. Наиболее удобна запись вида now + 3 hours (через три часа).
3.2.1. Запуск команд и сценариев с помощью команды at
Текст задания можно передать команде at двумя способами: в файле или в режиме командной строки at. Если задание состоит из одной команды или двух — трех команд, объединенных каналом, то удобнее воспользоваться вторым способом. Для запуска сценариев интерпретатора shell предпочтительнее первый вариант.
В случае необходимости выполнить одиночную команду вызовите команду at, указав требуемое время. Отобразится приглашение at>. Введите свою команду, а затем нажмите [Enter] и [Ctrl+D]. Рассмотрим пример.
$ at 21:10
at> find / -name "passwd" — print
at> <EOT>
warning: commands will be executed using /bin/sh job 1 at 1999-05-05 21:10
Запись <ЕОТ> появляется после нажатия [Ctrl+D]. Теперь в 21:10 будет выполнена команда find, ищущая в системе файлы с именем passwd. Обратите внимание на то, что команда at присваивает заданию уникальный идентификатор 1. Результаты выполнения команды find будут направлены вам по электронной почте. Вот фрагмент соответствующего электронного сообщения:
Subject: Output from your job 1
/etc/passwd
/etс/pam.d/passwd
/etc/uucp/passwd
/tmp/passwd
/root/passwd
/usr/bin/passwd
/usr/doc/uucp-1.06.1/sample/passwd