Я создал скрипт под названием «forward_email.sh» и установил разрешения для 777. Он содержит следующую строку:
echo "It worked: $(date)" >> /home/noc/email.log
Я создал задание cron со следующей строкой:
*/5 * * * * /home/noc/forward_email.sh
Проблема в том, что файл «email.log» никогда не изменяется. Я даже устанавливаю разрешения 666. Когда я запускаю скрипт вручную, он работает отлично.
Задача cron выполняется в соответствии с файлом «/var/log/cron.log».
Может кто-то указать мне в правильном направлении относительно того, что может пойти не так? Это минимальная установка виртуальной машины Ubuntu Server 9.04 с помощью cron, установленного через apt-get.
ОБНОВИТЬ: Я совершил очень тупую ошибку. Я назвал свой скрипт «forward_mail.sh». Я не был, пока не установил некоторые службы электронной почты, и получил следующее сообщение об ошибке от Cron, которое я обнаружил в своей ошибке.
У меня много головокружений.
Вы уверены, что запись crontab действительно указывает на ваш скрипт? Например, если вы хотите запустить скрипт, например, ~ NOC / бен / script.sh, но есть запись типа / Главная / NOC / бен / скрипт (то есть тонкая опечатка), тогда, конечно, это не сработает. Обычно я проверяю свои записи crontab, копируя команду из crontab с помощью мыши, а затем вставляя ее в командную строку, чтобы быть на 100% уверенным, что она будет запускать то, что я хочу.
Имеется ли в вашем скрипте только указанная строка? Обычно вам нужно включить что-то вроде:
#!/bin/bash
... в верхней части вашего скрипта, чтобы заставить его работать.
Если это сложнее, чем одна строка, вы конечно логика программирования позволит ему запустить эту конкретную строку?
Попробуйте уменьшить свой сценарий до
#!/bin/bash
echo "Bing!" >> /tmp/cronjob
... посмотреть, что произойдет. Если это работает, у вас есть проблема с программированием в вашем скрипте cron. Если это не удается, у вас есть проблема cron.
Является ли пользователь «noc» тем, у кого работает скрипт? Если нет, уверены ли вы, что пользователь, выполняющий скрипт cron, имеет доступ для чтения / записи через / home / noc в файл email.log?
Где ошибка электронной почты от пользователя, запускающего cronjob? Является ли сообщение электронной почты с ошибкой, а затем отправляется куда-то, чего вы не ожидаете или, возможно, вообще не сбрасываете? Попробуйте cronjob of
#!/bin/bash
echo "Bing!"
... и затем попытайтесь выяснить, где идет генерация электронной почты.
Есть ли cron.deny и / или cron.allow в игре? Если /etc/cron.allow существует, тогда пользователь noc должен быть указан в нем; если существует /etc/cron.deny. пользователь noc должен не быть перечисленным в нем. В RedHat, если не существует cron.allow или cron.deny, ТОЛЬКО пользователю root будет разрешено использовать cron.
Cron работает с ограниченным набором переменных окружения, особенно ваш $PATH
, Попробуйте поместить полный путь к любым двоичным файлам. Так /home/noc/forward_email.sh
должно быть:
/bin/echo "It worked: $(date)" >> /home/noc/email.log
Кроме того, что */5
делать в начале вашего скрипта? */5
работает каждые пять минут, 5
проходит один раз «5 минут за час каждый час».
5 * * * * /home/noc/forward_email.sh
#* * * * * command to be executed
#- - - - -
#| | | | |
#| | | | +----- day of week (0 - 6) (Sunday=0)
#| | | +------- month (1 - 12)
#| | +--------- day of month (1 - 31)
#| +----------- hour (0 - 23)
#+------------- min (0 - 59)
Наконец, вы отредактировали & сохранили crontab с помощью следующей команды:
crontab -e
... где ваш редактор выбирается переменной окружения $EDITOR
?
echo "It worked: $(date)" >> /home/noc/email.log
Есть ли /home/noc/email.log
существуют, прежде чем запускать скрипт? Доступно ли это для записи пользователем, выполняющим задание cron? Что произойдет, если вы его создадите заранее? например
touch /home/noc/email.log
chmod 666 /home/noc/email.log
Если у вас есть какие-либо сомнения относительно вашего скрипта, поставьте строку ниже в верхней части скрипта:
#!/bin/bash -x
(если вы не используете эту оболочку, просто положите ее)
Запуск подоболочки с помощью -x
(еИксplicit), который будет запускать весь скрипт в режиме отладки. Следы каждой команды плюс ее аргументы печатаются на стандартный вывод после того, как команды были расширены, но до их выполнения.