我编写了一个 Groovy 脚本来检查服务,如果发现问题,则发送电子邮件。它在命令行中运行良好。我一直在努力让它从 cron 中正常工作。
这是我当前的(已编辑的)crontab:
[email protected]
BASH_ENV=$HOME/.bashrc
0,5,10,15,20,25,30,35,40,45,50,55 * * * * . $HOME/.bashrc;$HOME/bin/monitorDataSourceStatus.groovy >> $HOME/mDSS.out 2>&1
我不认为 Ubuntu cron 使用“BASH_ENV”变量,但我看到其他“cron”参考资料中提到了这一点,所以我想尝试一下。MAILTO 也可能被忽略,因为我没有安装 MTA。
我知道 cron 的基本操作没问题,因为我按照这个规定每五分钟就会收到一个系统日志条目。最后一个看起来像这样:
Oct 2 09:30:01 hostname CRON[20268]: (myid) CMD (. $HOME/.bashrc;$HOME/bin/monitorDataSourceStatus.groovy >> $HOME/mDSS.out 2>&1)
Oct 2 09:30:01 hostname CRON[20267]: (CRON) info (No MTA installed, discarding output)
Oct 2 09:30:10 hostname crontab[20275]: (myid) LIST (myid)
但是,从预期的副作用可以看出,脚本似乎没有执行。我在脚本中启用了一些打印语句,但“mDSS.out”文件已经好几天没有修改了。
我不知道安装 MTA 是否可行。我猜是邮件传输代理。
答案1
MTA 消息是因为您的脚本正在生成 cron 通常会发送电子邮件的输出。
用这个替换你的 cron 任务:
[email protected]
BASH_ENV=$HOME/.bashrc
0,5,10,15,20,25,30,35,40,45,50,55 * * * * . $HOME/.bashrc;$HOME/bin/monitorDataSourceStatus.groovy > $HOME/mDSS.out 2>&1
您需要安装类似的 MTAsendmail
才能获取 cron 消息。(我将 >> 更改为 >)。
答案2
安装 ssmtp 很有帮助。当我能够看到输出时,我发现我的 .bashrc/.bash_profile 配置错误,这就是为什么作业输出文件中没有显示任何内容。我设法解决了这个问题,现在我的工作运行正常。