Планировщик CRON
From DD-WRT Wiki
English • Deutsch • Español • Français • Italiano • 日本語 • Polski • Português • Русский • Svenska • 中文(中国大陆) • 中文(台灣) • |
Contents |
[edit] Введение
Cron - это стандартный процесс системного планировщика в системах Linux и *nix. Службу Cron, также называемую crond, можно включить в системах DD-WRT. Более старые версии DD-WRT используют имя и команду cron, а в более новых сборках имя cron
было изменено на crond
, однако они работают одинаково.
Cron можно включить в разделе Services → Services (прошивки версии v23) or Administration → Management (прошивки версии v24) веб-интерфейса DD-WRT.
Когда cron запускается во время загрузки устройства DD-WRT, он ищет определенные инструкции. Они могут быть введены непосредственно в веб-интерфейсе DD-WRT или, для более опытных пользователей, сохранены в файлах в определенных местах (см. далее). Всякий раз, когда инструкции cron сохраняются в виде файлов, они называются файлами crontab. Смотрите ссылки внизу этой статьи для создания инструкций cron.
[edit] Предварительные настройки
Поскольку Cron выполняет команды в соответствии с расписанием по текущему времени, дату и время маршрутизатора обычно следует синхронизировать по протоколу NTP. Конфигурация для NTP находится непосредственно на первой странице настройки в разделе Basic → Setup Basic.
Вы можете проверить текущую дату и время в веб-интерфейсе, перейдя по ссылке:
- Status → Router → Current Time.
- Вы также можете проверить время в интерфейсе командной стоки (например, при подключении к маршрутизатору по протоколу SSH), набрав команду 'date'.
Чтобы убедиться, что Cron / Crond включен, перейдите к:
- Administration → Management → Cron
и убедитесь, что он включен.
[edit] Расположение инструкций
Инструкции заданий Cron могут храниться как минимум в трех местах DD-WRT:
- Поместите инструкции в формате crontab в поля группы cron веб-интерфейса на экране Administration → Management. Это самый простой метод. При использовании команд
stopservice cron && startservice cron
в оболочке командной строки эти команды будут храниться в каталоге/tmp/cron.d/cron_jobs
. Файлы, хранящиеся в/tmp
, удаляются во время перезагрузки, поэтому было бы целесообразно сохранить копию любых необходимых команд, в идеале, используя смонтированную файловую систему или SD-карту, если ваш маршрутизатор оснащен таковой. - Файлы Crontab можно создавать и сохранять в каталоге
/tmp/cron.d
, который хранится в оперативной памяти и теряется при перезапуске устройства DD-WRT или потере питания. Команды, добавленные в файл cron_jobs, отображаются на странице Administration → Management. Как отмечалось выше, использованиеstopservice cron && startservice cron
сохранит эти команды в каталоге/tmp/cron.d/cron_jobs
. - Файлы Crontab могут храниться в
/jffs/etc/crontab
, если вы используете файловую систему JFFS. См. JFFS.
Важно, чтобы вы вошли как администратор "root" перед использованием указанных команд, иначе они не будут работать, как указано. В примерах, приведенных во внешних ссылках выше или где-либо еще, команды с префиксом "root" исключены. Примеры вне Wiki и сайта DD-WRT предназначены для систем Linux с несколькими учетными записями: cron обычно запускает инструкции внутри файлов crontab в зависимости от того, какой пользователь их создал. Без использования "root" ваш это работает только в Telnet или SSH (например, Putty), потому что вы уже вошли в систему как root.
[edit] Другие методы, старые версии
Другие методы, старые версии
- Добавьте ваши инструкции в файл
/tmp/crontab
. Добавленные инструкции стираются при перезапуске. Чтобы этого не случилось используйте следующую команду в текстовом поле Startup Command веб-интерфейса или в файле сценария с расширением*.startup
, хранящемся в одном из каталогов, которые DD-WRT сканирует во время запуска (см. Запуск сценариев по событию):
echo ' * * * * * root /bin/date > /tmp/test.txt' >> /tmp/crontab
который будет выглядеть так в файле /tmp/crontab
:
* * * * * root /bin/date > /tmp/test.txt
- Создайте файл в папке
/tmp/cron.d/
(например,/tmp/cron.d/dosomething
), используя формат crontab. Файл сценария, выполняемый при запуске устройства или в разделе Startup Command веб-интерфейса, может выглядеть следующим образом:
echo '* * * * * root /bin/date > /tmp/test.txt' > /tmp/cron.d/date
В файле dosomething выглядит так :
* * * * * root /bin/date > /tmp/test.txt
[edit] Перезапуск Crond
После того, как вы измените / добавите инструкцию, вам нужно будет перезапустить службу cron, чтобы изменения вступили в силу. Вы можете перезапустить crond с помощью следующей команды: Старые версии DD-WRT:
-
stopservice cron && startservice cron
Новые версии DD-WRT:
-
stopservice crond && startservice crond
Примечание: версия DD-WRT v24sp1 удаляет каталог /tmp/cron.d
, когда служба cron остановлена. Вы должны остановить службу, создать каталог /tmp/cron.d
, поместить скрипт cron в этот каталог, а затем перезапустить службу cron.
[edit] Дополнительная информация
Вы можете добавить это к своим командам запуска в разделе Startup Commands (Administration → Diagnostics в веб-интерфейсе), прежде чем добавлять какие-либо инструкции. Это добавит ясности в ваш файл crontab:
/bin/sh -c 'echo "# minute (0-59)," >> /tmp/crontab' /bin/sh -c 'echo "# | hour (0-23)," >> /tmp/crontab' /bin/sh -c 'echo "# | | day of the month (1-31)," >> /tmp/crontab' /bin/sh -c 'echo "# | | | month of the year (1-12)," >> /tmp/crontab' /bin/sh -c 'echo "# | | | | day of the week (0-6 with 0=Sunday)." >> /tmp/crontab' /bin/sh -c 'echo "# | | | | | commands" >> /tmp/crontab'
Обратите внимание: то, что выполняется в сценарии запуска, вызывается без оболочки, поэтому каналы stdout и stderr не будут интерпретироваться должным образом, если вы не вызовете оболочку вручную (/bin/sh -c
).
Примечание. Если ваше устройство использует версию DD-WRT v23sp1, сценарий запуска не работает, поэтому вы можете сохранить все это как сценарий "firewall".
Если вы добавите это к своим командам автозапуска в разделе Startup Commands, вы увидите это в файле /tmp/crontab
:
# minute (0-59), # | hour (0-23), # | | day of the month (1-31), # | | | month of the year (1-12), # | | | | day of the week (0-6 with 0=Sunday). # | | | | | commands
[edit] Общие проблемы
[edit] Различия в переменной $PATH
Cron работает с переменной $PATH, отличной от той, что есть в вашей оболочке командной строки, когда вы подключаетесь к маршрутизатору по Telnet или SSH. Переменная $PATH содержит места, где оболочка может искать файлы приложений, когда вы пытаетесь запустить их без указания полного пути к ним. Это означает, что Cron может не найти программы, которые вы пытаетесь использовать. Вы можете либо проверить, какой полный путь к программам используется с помощью команды which
, а затем использовать полный путь в ваших скриптах, например /usr/bin/uptime
, а не просто uptime
, или вы можете проверить значение переменной $PATH, запустив echo PATH=$PATH
в вашей оболочке, а затем скопировать вывод в верхнюю часть файла crontab или скрипта.
root@DD-WRT:~# which uptime /usr/bin/uptime
root@DD-WRT:~# echo PATH=$PATH PATH=/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/mmc/sbin:/mmc/bin:/mmc/usr/sbin:/mmc/usr/bin:/opt/sbin:/opt/bin:/opt/usr/sbin:/opt/usr/bin
[edit] Служба CRON засыпает в прошивке версии V24
Служба cron часто засыпает, а задания cron не выполняются. Это требует перезапуска службы cron командами stopservice cron
и startservice cron
. Прошивки версии V23 не имеют этой проблемы.
исправлено в сборке r41189, согласно этой темы форума: https://forum.dd-wrt.com/phpBB2/viewtopic.php?t=321629
[edit] Рабочий каталог
Cron работает с тем же рабочим каталогом, который вы используете при подключении по протоколу Telnet или SSH к маршрутизатору:
root@DD-WRT:~# pwd /tmp/root
Если вы сохраняете файлы без пути, они окажутся в этом каталоге. Убедитесь, что ваши пути к файлам правильные, чтобы не пришлось их искать.