cron работает но ничего не происходит

2994
Joseph

Я создал скрипт с именем 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, в котором я обнаружил свою ошибку.

/bin/sh: /home/noc/forward_email.sh: not found 

Я изменил имя файла, и теперь он работает.

4
это больше не похоже на .. вопрос о сбое сервера? codingbear 14 лет назад 0
Пользователи используют cron. Richard Hoskins 14 лет назад 2
Можете ли вы предоставить вывод crontab -l? John T 14 лет назад 0
crontab -l выводит ту же строку в исходном вопросе. Joseph 14 лет назад 0
/Etc/cron.allow существует? Richard Hoskins 14 лет назад 2
Да, и единственное, что в нем содержится, это "noc". Joseph 14 лет назад 0
Каковы разрешения /etc/cron.allow? Существует ли cron.deny? Richard Hoskins 14 лет назад 0
-rw-r - r-- 1 root root 10 2009-08-04 01:01 cron.allow cron.deny не существует. Joseph 14 лет назад 0
@ Джозеф: Дурак взял! ;-) Pete 14 лет назад 0

4 ответа на вопрос

6
David Mackintosh

Много потенциальных вещей с моей головы.

Вы уверены, что запись в crontab действительно указывает на ваш скрипт? Например, если вы хотите запустить скрипт, такой как ~ noc / bin / script.sh, но иметь запись типа / home / noc / bin / script (т. Е. Неуловимая опечатка), то, конечно, он не будет работать. Я обычно проверяю свои записи в crontab, копируя команду из crontab с помощью мыши, а затем вставляя ее в командную строку, просто чтобы быть на 100% уверенным, что она будет работать так, как я хочу.

Ваш скрипт содержит только указанную строку? Обычно вы должны включить что-то вроде:

#!/bin/bash 

... в верхней части вашего скрипта, чтобы заставить его работать.

Если это сложнее, чем одиночная строка, вы уверены, что логика программирования позволит ей запускать эту конкретную строку?

Попробуйте уменьшить ваш скрипт до

#!/bin/bash echo "Bing!" >> /tmp/cronjob 

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

Является ли пользователь 'noc' сценарием? Если нет, то уверены ли вы, что пользователь, выполняющий скрипт cron, имеет доступ на чтение / запись через / home / noc к файлу email.log?

Куда отправляется сообщение об ошибке от пользователя, запустившего cronjob? Генерируется ли сообщение об ошибке, а затем отправляется куда-то, чего вы не ожидаете, или, возможно, его вообще сбрасывают? Попробуйте cronjob из

#!/bin/bash echo "Bing!" 

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

Cron.deny и / или cron.allow в игре? Если /etc/cron.allow существует, то в нем должен быть указан пользователь noc; если /etc/cron.deny существует. пользователь noc не должен быть указан в нем. В RedHat, если не существует ни cron.allow, ни cron.deny, ТОЛЬКО пользователь root может использовать cron.

Я сократил свой сценарий и ничего не происходит до сих пор. Пользователь noc должен быть единственным пользователем, выполняющим скрипт, поскольку он является единственной учетной записью. На этом сервере не установлены почтовые сервисы. Joseph 14 лет назад 0
Хм ... Убунто использует cron.allow и cron.deny? David Mackintosh 14 лет назад 0
Хорошо, видел ваше обновление, рад, что вы выяснили это. David Mackintosh 14 лет назад 0
5
Pete

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?

* / 5 запускается каждые 5 минут. только 5 будут запускаться один раз в час в 5 минут после часа. pgs 14 лет назад 2
Добавление полного пути ничего не изменило. Я создал контрабанду с помощью crontab -e. Редактор нано. Joseph 14 лет назад 0
1
pgs
echo "It worked: $(date)" >> /home/noc/email.log 

Существует ли /home/noc/email.logдо запуска сценария? Доступно ли для записи пользователю, выполняющему задание cron? Что произойдет, если вы создадите его заранее? например

touch /home/noc/email.log chmod 666 /home/noc/email.log 
Нет да. То же самое. Joseph 14 лет назад 0
0
DeaconFraust

Если у вас есть какие-либо сомнения относительно вашего сценария, поместите строку ниже в верхней части сценария:

 #!/bin/bash -x 

(если вы не используете эту оболочку, просто установите хорошую)

Запуск подоболочки с опцией -x(e X plicit), которая запустит весь скрипт в режиме отладки. Следы каждой команды плюс ее аргументы выводятся на стандартный вывод после расширения команд, но до их выполнения.

Похожие вопросы