Я использовал эти 2 ссылки, чтобы вставить новую запись в crontab.

Красная шляпа

убунту

Я создал новый файл bash и переместил его в /usr /bin. Этот sh-файл имеет права на выполнение для пользователя root и группы администраторов. Файл bash просто выводит строку в файл журнала, а затем вызывает программу Java. Я проверил файл sh как root, вручную. Работает нормально. Моя запись в crontab выглядит так ...

 @hourly      /usr/bin/foo.blah.sh

Он должен работать на вершине каждого часа. Оператор echo не печатается в файле журнала, поэтому я не думаю, что crond вообще его вызывает. Также, когда я визуально отслеживаю процессы в "верху", задание никогда не появляется. Я запустил "service crond status", чтобы проверить, запущен ли демон cron. В документации сказано, что перезапуск демона не требуется. Что еще я могу делать не так?

2 ответа2

1

Вы на самом деле не говорите, где находится запись в 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.

0

В прошлом при добавлении скриптов в cron я всегда приводил строку с sh, например:

@hourly    sh /usr/bin/foo.blah.sh

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .