
У меня есть этот cron
38 * * * * /bin/bash -l -c 'cd /var/rails/site/releases/20120705144335 && script/rails runner -e qa '\''Play.load_lists'\'''
У меня этот cron находится под другим пользователем, поэтому я переключаю пользователей для развертывания
sudo su deploy
crontab -e
и я вижу свой cron, затем я просматриваю журнал под пользователем root
tail -n300 -f /var/log/syslog
и я вижу свой cron
Jul 5 11:38:01 ip-10-70-75-234 CRON[4971]: (deploy) CMD (/bin/bash -l -c 'cd /var/rails/site/releases/20120705144335 && script/rails runner -e qa '\''Play.load_lists'\''')
Jul 5 11:38:01 ip-10-70-75-234 CRON[4970]: (CRON) info (No MTA installed, discarding output)
Но cron либо не запущен, либо возникла проблема с правами доступа... Когда я запускаю задачу в консоли, она работает отлично, но не в cron... есть идеи, что я упускаю?
это Ubuntu 12.04 LTS
Может быть, я смогу зарегистрировать более подробный список где-нибудь, чтобы увидеть ошибки.
решение1
CRON доставляет вывод приложений (stdout, stderr) через локальную почту. В Ubuntu, по всей видимости, в настоящее время по умолчанию не установлен MTA (Mail Transfer Agent). CRON выводит уведомление в системный файл журнала всякий раз, когда доставка не удалась:
Jul 5 11:38:01 ip-10-70-75-234 CRON[4970]: (CRON) info (No MTA installed, discarding output)
Вы можете установить MTA, например, postfix, только для внутреннего (локального) использования, например
aptitude install postfix
Во время установки вам будет предложено выбрать конфигурацию по умолчанию. Вам следует выбрать конфигурацию Local only
.
После этого вы можете найти вывод приложений, запущенных CRON, используя
tail -f /var/mail/<your_username>
Конечно, вы также можете записать вывод журнала в специальный файл журнала или перенаправить вывод в файл, используя встроенную функциональность оболочки...