Cron.hourly не будет работать

Итак, я сделал свой сценарий, я бросил его в /etc/cron.hourly затем я chmod 777 файл, но он не запустится (автоматически). Если я запускаю его вручную, он работает нормально. Мне нужно сделать что-нибудь еще?

6 ответов

Решение

Почему бы не использовать crontab ( /etc/crontab) и использовать */1 в поле часа. Я использовал это для запуска скрипта каждые 5 минут, и он работает хорошо:

# m h dom mon dow user  command
* */1  * * *   user    command

Записи в cron.hourly управляются механизмом run-parts (man run-parts для получения дополнительной информации). А также run-parts разборчив в том, какие имена файлов он считает действительными.

Например, расширение вашего скрипта сделает его недействительным и приведет к тому, что задание не будет запущено. [a-zA-Z0-9_-] допустимые символы, поэтому символ '.' делает его недействительным

При добавлении работы в /etc/cron.hourly (или же .daily, .weekly и т. д.), всегда проверяйте run-parts фактически запустит его, выполнив команду:

run-parts --test /etc/cron.hourly

Если при запуске этой команды он показывает ваш файл, значит, он работает. В противном случае, если ничего не отображается, ваше имя файла недействительно.

Как назывался твой сценарий?

Ответ DaithiF должен быть правильным.

Кроме того, мой сценарий не имел #!/bin/bash в первой строке. Даже если сценарий может быть выполнен с помощью командной строки, run-parts отклонил это, говоря "Ошибка формата Exec".

Изменение имени файла с scriptname.sh в scriptname и добавление #!/bin/bash в первую строку включил мой скрипт для запуска каждый час.

Ваша проблема, вероятно, связана с чрезмерно открытыми разрешениями, которые позволяют любому редактировать ваш файл. Пытаться 755 вместо.

Просмотр записей cron в выходных данных системного журнала должен подтвердить это.

В моем случае я сделал эти ошибки, из-за которыхcron.hourlyне будет выполнять мой скрипт:

  1. Я забыл проверить, работает ли служба crond:systemctl status crond

  2. Я не добавлял новую пустую строку в самый конец моего файла сценария, как это делают сценарии cron в других папках.

  3. Я создал свой файл сценария с помощью WinSCP в Windows, таким образом вставив Windows-подобный символ EOL, который cron не может правильно интерпретировать. Поэтому мне нужно было выполнитьsed -i -e 's/\r$//' /etc/cron.hourly/myscriptИсправить это.

Когда ты бежишь

crontab -l

это задача в списке?

если нет, добавьте его

crontab -e

добавить эту строку

0 * * * * yourScript

если он находится в этом списке, попробуйте добавить путь к языку программирования в начало вашего скрипта

Пример:

bash: #!/bin/bash

Это 2 вещи всегда решали мои проблемы:)

Другие вопросы по тегам