Хм .. не кладите цепочечные команды в cron, вместо этого используйте внешний скрипт. В любом случае: некоторые предложения, которые могут вам помочь:
Отладка команд cron
Проверьте почту! По умолчанию cron отправляет любые выходные данные команды пользователю, для которого она выполняет команду. Если нет вывода, не будет почты. Если вы хотите, чтобы cron отправлял почту на другую учетную запись, вы можете установить переменную среды MAILTO в файле crontab, например
MAILTO=user@somehost.tld
1 2 * * * /path/to/your/command
Захватите вывод самостоятельно
1 2 * * * /path/to/your/command &>/tmp/mycommand.log
, который захватывает stdout и stderr в /tmp/mycommand.log
Посмотрите на бревна; cron регистрирует свои действия через системный журнал, который (в зависимости от ваших настроек) часто идет в /var/log/cron
или /var/log/syslog
.
При необходимости вы можете отфильтровать операторы cron, например,
grep CRON /var/log/syslog
Теперь, когда мы рассмотрели основы cron, где находятся файлы и как их использовать, давайте рассмотрим некоторые распространенные проблемы.
Убедитесь, что cron работает
Если cron не запущен, ваши команды не будут запланированы ...
ps -ef | grep cron | grep -v grep
должен получить что-то вроде
root 1224 1 0 Nov16 ? 00:00:03 cron
или
root 2018 1 0 Nov14 ? 00:00:06 crond
Если не перезапустить, то
/sbin/service cron start
или
/sbin/service crond start
Могут быть и другие методы; используйте то, что обеспечивает ваш дистрибутив.
cron запускает вашу команду в ограниченной среде.
Доступные переменные среды, вероятно, будут очень ограниченными. Как правило, вы получите только несколько определенных переменных, таких как $LOGNAME
, $HOME
и $PATH
.
Особо следует отметить, что PATH
ограничен /bin:/usr/bin
. Подавляющее большинство проблем "мой скрипт cron не работает" вызвано этим ограничительным путем . Если ваша команда находится в другом месте, вы можете решить эту проблему несколькими способами:
Укажите полный путь к вашей команде.
1 2 * * * /path/to/your/command
Укажите подходящий PATH в файле crontab
PATH=/usr:/usr/bin:/path/to/something/else
1 2 * * * command
Если вашей команде требуются другие переменные окружения, вы можете определить их и в файле crontab.
cron запускает вашу команду с помощью cwd == $ HOME
Независимо от того, где исполняемая программа находится в файловой системе, текущий рабочий каталог программы при запуске cron будет домашним каталогом пользователя . Если вы обращаетесь к файлам в своей программе, вам нужно будет это учитывать, если вы используете относительные пути или (предпочтительно) просто везде используете полные пути и избавите всех от путаницы.
Последняя команда в моем crontab не запускается
Cron обычно требует, чтобы команды заканчивались новой строкой. Отредактируйте свой crontab; перейдите в конец строки, содержащей последнюю команду, и вставьте новую строку (нажмите ввод).
Проверьте формат crontab
Вы не можете использовать пользовательский crontab в формате / crontab для / etc / crontab или фрагменты в /etc/cron.d и наоборот. Crontab, отформатированный пользователем, не содержит имя пользователя в 6-й позиции строки, в то время как crontab, отформатированный системой, включает имя пользователя и запускает команду от имени этого пользователя.
Я поместил файл в /etc/cron.ndomhourly,daily,weekly,monthly}, и он не запустился
- Убедитесь, что имя файла не имеет расширения, см. run-parts
- Убедитесь, что у файла есть разрешения на выполнение.
- Скажите системе, что использовать при выполнении вашего скрипта (например, поставьте
#!/bin/sh
вверху)
Cron дата связанных с ошибками
Если ваша дата была недавно изменена в результате обновления пользователя или системы, часового пояса или другого, то crontab начнет работать неправильно и выдает странные ошибки, иногда работающие, иногда нет.Это попытка crontab попытаться «сделать то, что вы хотите», когда время изменится из-под него.Поле «минуты» станет недействительным после смены часа.В этом случае принимаются только звездочки.Перезапустите cron и попробуйте снова, не подключаясь к Интернету (чтобы у даты не было возможности выполнить сброс на один из серверов времени).
Знаки процента, снова
Чтобы подчеркнутьсоветы о знаках процента, вот пример того, что cron делает с ними:
# cron entry
* * * * * cat >$HOME/cron.out%foo%bar%baz
создаст файл ~ / cron.out, содержащий 3 строки
foo
bar
baz
Это особенно навязчивопри использовании команды date
.Обязательно избегайте знаков процента
* * * * * /path/to/command --day "$(date "+\%Y\%m\%d")"