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
не будет выполнять мой скрипт:
Я забыл проверить, работает ли служба crond:
systemctl status crond
Я не добавлял новую пустую строку в самый конец моего файла сценария, как это делают сценарии cron в других папках.
Я создал свой файл сценария с помощью WinSCP в Windows, таким образом вставив Windows-подобный символ EOL, который cron не может правильно интерпретировать. Поэтому мне нужно было выполнить
sed -i -e 's/\r$//' /etc/cron.hourly/myscript
Исправить это.
Когда ты бежишь
crontab -l
это задача в списке?
если нет, добавьте его
crontab -e
добавить эту строку
0 * * * * yourScript
если он находится в этом списке, попробуйте добавить путь к языку программирования в начало вашего скрипта
Пример:
bash: #!/bin/bash
Это 2 вещи всегда решали мои проблемы:)