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

55

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

Switchkick
источник
Этот ответ не должен был получить столько голосов без названия файла и содержания.
пользователь неизвестен

Ответы:

13

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

# m h dom mon dow user  command
* */1  * * *   user    command
oli206
источник
6
Использование cron.dailyand friends работает немного лучше, если машина не работает все время, потому что anacron пытается приблизиться к правильному расписанию, тогда как обычный cron просто не запустит их, если машина не работает всю ночь. Для почасовой работы это, вероятно, не так важно.
Poolie
9
Я действительно ценю следующий ответ, поскольку он решает проблему с cron.hourly, а не находит обходной путь.
Тишма
4
Это не ответ на вопрос
josh123a123
@poolie Как можно видеть на/etc/crontab : cron.daily, cron.weeklyи cron.monthly работать с Anacron (если таковые имеются) , а по часам run-parts --report /etc/cron.hourly.
Пабло А
144

Записи в 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
источник
Есть два: cerebro_random_response.sh и Cerebro Temperature.sh не хорошо?
Switchkick
21
правильно, ничего хорошего :) [a-zA-Z0-9_-] - допустимые символы, поэтому '.' делает его недействительным Это то, что я имел в виду выше, когда «расширение вашего скрипта сделает его недействительным»
DaithiF
11
OMG, это только спасло огромную головную боль. БЛАГОДАРЮ ВАС! giving your script an extension will make it invalid and result in the job not being run
Джонатан С. Фишер
Вы также можете использовать --reportдля запуска сценариев.
Пабло А
5

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

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

Плачь Хавок
источник
4

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

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

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

Бен Лин
источник
-1

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

crontab -l

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

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

crontab -e

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

0 * * * * yourScript

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

Пример:

bash: #!/bin/bash

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

Волчок
источник
Сделано все, и сценарий хорош, он работает как шарм. Он также находится в списке crontab, но ежечасные задачи не выполняются. Все равно спасибо :(
Switchkick