Вы на самом деле не говорите, где находится запись в crontab, но на основании вашего комментария, что crontab -l
выводит no crontab for root
, я бы рискнул предположить, что вы добавили файл в один из каталогов /etc/cron.*, который содержит файлы, соответствующие различным заданиям cron. Этот ответ предполагает, что это так.
Эти файлы имеют формат, который немного отличается от пользовательского crontab, который вы редактируете через crontab -e
. В частности, они включают поле имени пользователя непосредственно перед командой, которое не включено в пользовательский crontab (который по крайней мере в моей системе хранится в /var /spool /cron /crontabs, но, пожалуйста, не злоупотребляйте этой информацией; точное местоположение - это деталь реализации демона cron, который вы запускаете, и вы должны использовать документированные интерфейсы для управления этими файлами).
В результате вы должны изменить
@hourly /usr/bin/foo.blah.sh
в
@hourly user /usr/bin/foo.blah.sh
где user
- имя учетной записи пользователя, от имени которой запускается скрипт. Затем он должен работать нормально.
Я настоятельно рекомендую вам не запускать задания cron от имени root
если вы не обязаны это делать; делать что-либо в качестве суперпользователя - это всегда угроза безопасности. Если возможно, предоставьте скрипту собственную учетную запись с ограниченным доступом. (Это принцип наименьших привилегий; наименьший, то есть тот, который требуется для выполнения своей работы.) Как правило, вы должны помещать системные локальные файлы в /usr /local, чтобы избежать конфликтов с менеджером системных пакетов; Кроме того, во избежание путаницы не помещайте вещи в каталог bin, для работы которого требуются привилегии root, вместо этого используйте sbin.