我有这个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(邮件传输代理)。每当传递失败时,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>
当然,您也可以将日志输出写入专用日志文件或使用内置 shell 功能将输出通过管道/重定向到文件...