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


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


4
2017-08-04 03:49


происхождения


это не похоже на вопрос о сервере? - codingbear
Пользователи используют cron. - Richard Hoskins
можете ли вы предоставить вывод crontab -l? - John T
crontab -l выводит ту же строку в исходном вопросе. - Joseph
Существует ли /etc/cron.allow? - Richard Hoskins


ответы:


У меня много головокружений.

Вы уверены, что запись 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.


6
2017-08-04 04:14



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


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
2017-08-04 04:22



* / 5 запускает его каждые 5 минут. имея всего 5, он будет запускать его один раз в час через 5 минут после часа. - pgs
Добавление полного пути ничего не изменило. Я создал контраб с «crontab -e». Редактор - нано. - Joseph


echo "It worked: $(date)" >> /home/noc/email.log

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

touch /home/noc/email.log
chmod 666 /home/noc/email.log

1
2017-08-04 04:43



Нет да. То же самое. - Joseph


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

 #!/bin/bash -x

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

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


0
2017-12-21 18:33