Я хочу выполнять команду от имени пользователя root на машине с Ubuntu 11.04 каждые 24 часа. Эта машина работает не всегда, но когда она включена, ее можно оставить на несколько дней. Как правильно настроить мой crontab для выполнения этой команды с желаемым интервалом, и есть ли что-то особенное в выполнении задания cron от имени root, о котором я должен знать? Я единственный человек, который использует эту машину.
2 ответа
Вы можете просто добавить свой скрипт для выполнения в каталог /etc/cron.daily
- он будет выполняться один раз в день anacron
.
Выдержка из man 8 anacron
:
Anacron может использоваться для периодического выполнения команд с частотой, указанной в днях. В отличие от cron(8), он не предполагает, что машина работает непрерывно. Следовательно, его можно использовать на машинах, которые не работают 24 часа в сутки, для контроля ежедневных, еженедельных и ежемесячных заданий, которые обычно контролируются cron.
Чтобы отредактировать crontab root, запустите:
sudo crontab -e
Заполните строку, например:
0 0 * * * /usr/sbin/ntpdate-debian -s
Это будет выполнять указанную команду ntpdate
с ключом -s
один раз в полночь (см. info 'crontab(5)'
для документации о формате или, возможно, только закомментированные первые строки самого crontab).
Несколько небольших указателей:
- Обратите внимание, что команды в crontab обычно выполняются через
/bin/sh
, который в системе на основе Debian не Bash, а Dash. Будьте осторожны, чтобы не использовать Bashisms в командах. По моему опыту, нередко можно видеть неправильные перенаправления и неверные предположения о том, какие символы нужно экранировать. Часто рекомендуется указывать полные пути к двоичным файлам, поскольку переменная
PATH
может отличаться для пользователя root и обычного пользователя. Я видел ситуации, когда одна команда скрывала другую из-за различныхPATH
, что является ненужным осложнением.Это может также рассматриваться как некоторая угроза безопасности для простого запуска программы, которая является первой в поиске пути, так как небрежная конфигурация может открыть это для кого-то, чтобы заменить двоичный файл (если у кого-то есть такие права в системе, один возможно, может сделать это в любом случае в какой-то степени, но тем не менее).
Cron будет выполнять команду каждые 24 часа, пока машина работает в данный момент. Если вы хотите, чтобы машина "догоняла", если она была выключена при запланированном выполнении, вы должны посмотреть на anacron
который имеет именно эту цель.