
Я использовал эти 2 ссылки для вставки новой записи в crontab.
Я создал новый файл bash и переместил его в /usr/bin. Этот файл sh имеет права на выполнение для пользователя root и группы admin. Файл bash просто выводит строку в файл журнала, а затем вызывает программу java. Я протестировал файл sh вручную как root. Он работает нормально. Моя запись в crontab выглядит так...
@hourly /usr/bin/foo.blah.sh
Он должен запускаться в начале каждого часа. Оператор echo не выводится в файл журнала, поэтому я не думаю, что crond вообще его вызывает. Кроме того, когда я визуально отслеживаю процессы в "top", задание никогда не появляется. Я запустил "service crond status", чтобы убедиться, что демон cron запущен. В документации сказано, что перезапуск демона не нужен. Что еще я могу делать неправильно?
решение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.
решение2
Раньше при добавлении скриптов в cron я всегда начинал строку с sh, вот так:
@hourly sh /usr/bin/foo.blah.sh