Назад | Перейти на главную страницу

crontab не работает

 MAILTO="jnylund@***"
 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/myapp/current/script/fetch_emails.sh
 0 3 * * * /home/myapp/current/script/send_insurance_reminders.sh

Привет, первое задание запускается каждые 5 минут, другое, похоже, не запускается (нет файла журнала, нет ошибки электронной почты, ничего). Я должен делать что-то глупое ... есть идеи? Он отлично работает в командной строке.

Вот сценарий оболочки:

 cd /home/myapp/current;rake send_insurance_reminders RAILS_ENV=production >> /home/myapp/current/log/insurance_reminders.log

Файл журнала не обновлялся с тех пор, как я последний раз запускал его вручную

Как насчет изменения строки cron на:

 0 3 * * * /bin/bash /home/myapp/current/script/send_insurance_reminders.sh

Вы ведь ждете до трех утра, чтобы он запустился, верно?

Если да, то зависит ли это от переменной среды, установленной в вашей оболочке входа в систему?

Имеет ли сценарий оболочки необходимые разрешения на чтение и выполнение?

Cron проигнорирует запись без символа новой строки в конце - дважды проверьте, есть ли у вас новая строка (или две!) После последней записи.

Как вы редактировали файл crontab?

В зависимости от вашей реализации cron он может не получать изменения в файле crontab, если вы редактируете его напрямую. Если это так, либо отредактируйте файл crontab с помощью crontab -e или сообщите процессу cron об изменениях (см. страницу руководства вашей реализации cron, чтобы узнать, как это сделать).

Однако многие современные реализации cron замечают изменения автоматически. Это может быть неправильное решение в вашем случае, но это возможность, и я еще не видел, чтобы об этом упоминалось.

Чтобы помочь с диагностикой, вы можете добавить logger операторы в начало и конец вашего cron, чтобы сообщения отправлялись в syslog:

logger -t fetchmail Mail Fetch Started; /home/myapp/current/script/fetch_emails.sh && logger -t fetchmail Mail Fetch Completed

Причина, по которой вы хотите, чтобы перед финальным сообщением стояла «&&», заключается в том, что если ваш скрипт не выполнится, он никогда не отправит завершенное сообщение в syslog.

Лично мне нравится использовать теги ( -t), чтобы упростить поиск системного журнала с помощью grep.

Вы прямо не сказали, что ваш сценарий работает. Предполагая, что это так, убедитесь, что cron работает от вашего имени. Если это не так, убедитесь, что у пользователя, запускающего cron, есть разрешения на выполнение сценария.

При устранении неполадок с crons мне также нравится обращаться к этому пользователю su (обычно используя su - username) и выполнить скрипт вручную.