it-swarm-ru.tech

Почему мой crontab не сработал?

Я использовал crontab -e чтобы добавить следующую строку в мой crontab:

* * * * * echo hi >> /home/myusername/test

Тем не менее, я не вижу, чтобы тестовый файл был записан в. Это проблема с правами доступа или crontab работает неправильно?

Я вижу, что процесс cron запущен. Как я могу отладить это?

Редактировать - Спросите, что у Ubuntu есть Хороший вопрос о crontab , к сожалению, это все еще не помогает мне.

Редактировать 2 - Хм, кажется, мой тестовый файл имеет 214 строк, что означает, что за последние 214 минут он записывался в каждую минуту. Я не уверен, в чем была проблема, но она, очевидно, ушла.

29
ripper234

Существуют реализации cron (не все из них, и я не помню, какие из них были вручную, но я встречал их в Linux), которые каждую минуту проверяют наличие обновленных файлов crontab и не учитывают Новые записи до следующей минуты. Таким образом, для запуска crontab может потребоваться до двух минут. Это может быть то, что вы заметили.

23
Gilles 'SO- stop being evil'
28
gelraen

У меня была такая же проблема - рабочий crontab внезапно остановился после того, как я добавил новую запись в конце. Оказалось, что я забыл поставить новую строку после этой последней строки.

Я узнал, выдав команду

cat /var/log/syslog | grep crontab

и вывод показал проблему:

Jul  2 08:16:01 shiva cron[1254]: (*system*) RELOAD (/etc/crontab)
Jul  2 08:16:01 shiva cron[1254]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)

Добавление новой строки и сохранение исправили проблему.

10
uniomni

Похоже, это исправлено. В следующий раз попробуйте войти в STDERR. Следующее будет только входить в STDOUT, а не в STDERR:

* * * * * echo hi >> /home/myusername/test

Постарайтесь убедиться, что есть и явное предложение для STDERR. В противном случае STDERR может быть отправлен пользователю по электронной почте (при условии, что электронная почта работает) или может вообще не отправиться, в зависимости от конфигурации Cron.

* * * * * echo hi >> /home/myusername/test 2> /home/myusername/test.stderr

мое предпочтение - отправлять вывод cronjob в системный журнал. Таким образом, я использую преимущества любой существующей инфраструктуры системного журнала (централизованные системные журналы, Splunk, ротация журналов уже поддерживается, легко сравнивать сообщения в/var/log/messages &/var/log/cronjob и т.д.), И я не рассылать сисадминам (мне) ненужные электронные письма.

* * * * * echo hi >> /home/myusername/test 2>&1 | /usr/bin/logger -t mycronjob
5
Stefan Lasiewski

У меня проблема была в том, что скрипт не был исполняемым. У меня была crontab -e такая настройка

* * * * * /bin/my-script.sh

И файл myscript не был исполняемым, поэтому я запустил

chmod +x my-script.sh

Сразу же я начал видеть результат, как ожидалось.

2
santiago arizti

Я мог бы предположить, что одной из причин этого может быть то, что каталог/home/зашифрован, и когда пользователь вышел из системы, cron не может ничего сделать в этом каталоге.

см .: https://stackoverflow.com/a/40354269/1279002

1
theINtoy

Ваша строка cron отлично работает на моем компьютере, когда я изменяю myusernae на phunehehe. Есть несколько способов узнать, что не так с вашей системой.

Крон обычно отправляет почту пользователю, когда что-то не так. Если вы видите сообщение "У вас есть почта", используйте почтовый клиент для проверьте ваш почтовый ящик . Или, проверьте в вашем домашнем каталоге, может быть файл с именем dead.letter там.

Ты можешь проверить /var/log/ для записей, относящихся к cron. На моем компьютере файл журнала находится на /var/log/cron/current (требуется root-доступ).

Если у вас есть root-доступ, вы можете остановить демон cron и запустить его в режиме отладки. Например, я бы использовал (замените fcron на имя вашего демона):

killall fcron
fcron --foreground --debug
1
phunehehe

Скорее всего, когда происходит сбой cron, он генерирует электронное письмо с идентификатором пользователя задания cron на этом компьютере. Если на вашем компьютере не работает MTA, или вы не читаете и не пересылаете эту почту куда-то еще, вы не увидите это сообщение, даже если MTA работает.

Хороший способ получить ошибки вашего crontab по почте - сделать так, чтобы ваш crontab выглядел так:

MAILTO="[email protected]"
* * * * * echo hi >> /home/myusernae/test

Очевидно, используйте свой адрес электронной почты, а не [email protected] Это говорит cron отправлять ошибки на ваш адрес электронной почты, а не на локальную учетную запись. В частности, это полезно, если у вас есть корневой crontab (или фрагмент crontab в /etc/cron.d), который вы хотите просто отправить вам, вы можете избежать спама в почтовом ящике root или адресе переадресации root.

1
jsbillings