Почему мой кронтаб не срабатывал?

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

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

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

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

Изменить – спросить у Ubuntu хороший вопрос о crontab , к сожалению, это все равно не помогает.

Edit 2 – Хм, похоже, мой тестовый файл имеет 214 строк, что означает, что за последние 214 минут он был написан каждую минуту. Я не уверен, в чем проблема, но, похоже, она исчезла.

8 Solutions collect form web for “Почему мой кронтаб не срабатывал?”

Существуют реализации cron (не все из них, и я не помню, что изначально, но я столкнулся с одним из них под Linux), которые проверяют обновленные файлы crontab каждую минуту в минуту и ​​не рассматривают новые записи до следующего минута. Таким образом, 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) 

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

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

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

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

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

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

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

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

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

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

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

 killall fcron fcron --foreground --debug 

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

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

 MAILTO="myemail@example.com" * * * * * echo hi >> /home/myusernae/test 

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

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

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

И файл myscript не был выполнен, поэтому я побежал

 chmod +x my-script.sh 

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

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

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

  • crontab не запускает один скрипт
  • Как только выводить команды из CRON?
  • почему не 0 0 * * 1 root hostname >> /tmp/hostname.txt работать как crontab?
  • Что делает * / 13 в crontab?
  • проблема с работой cron каждые 2 минуты
  • Запуск работы в рубине
  • Задача Cron не сохранять
  • Cronjob (ы) для нескольких пользователей
  • Периодически запускать определенный скрипт во время загрузки
  • сломанное задание cron после его редактирования
  • Выполняется ли задание, запланированное в crontab, даже когда я выхожу из системы?
  • Interesting Posts

    Использование rsync для копирования с локального на удаленный сервер с помощью cronjob с запросом пароля

    Аутентификация с открытым ключом с суффиксом пользователя SFTP

    Как безопасно удалять старые версии ядра в CentOS 7?

    Использование программ btrfs для песочницы

    XFS Volume имеет неправильный размер блока после установки

    Должен ли я перемещать двоичный файл, используемый пользователем без полномочий root из / usr / bin / в / usr / local / bin /?

    loop-device: это объект Linux или более низкий уровень?

    Интеграция настраиваемого LPD-фильтра в CUPS

    Как создать новый раздел на жестком диске?

    Сервер WebDAV с правами доступа к PAM и системному файлу?

    Двойная загрузка Fedora и Windows 8 дает ошибку: вам нужно сначала загрузить ядро

    Почему sed не удаляет мои пустые строки?

    Удалить рекурсивные файлы, которые НЕ соответствуют регулярному выражению

    Как отредактировать файл .gpg с vi?

    Как выбрать строки и выполнить команду форматирования?

    Linux и Unix - лучшая ОС в мире.