我正在尝试设置一个crontab,我在当前用户中我的工作中有这是我登录到
的当前用户* * * * * /CS/day/get_info.sh
get_info.sh应该每分钟输出文本文件,我怀疑它会输出与脚本的同一目录中的文件,但没有输出。
我还检查了Syslogs,看看是否可以解决这个问题。
(user) CMD (/CS/day/get_info.sh)
(user) MAIL (mailed 46 bytes of output but got status 0x0001#012)
有人可以向我解释为什么会发生这种情况吗?
谢谢
man cron
告诉你:
When executing commands, any output is mailed to the owner of the crontab (or to the user named in the MAILTO environment variable in the crontab, if such exists). The children copies of cron running these processes have their name coerced to uppercase, as will be seen in the syslog and ps output.
所以你必须
-
cd
自己进入适当的目录(Cron将使用$HOME
) - 重定向任何输出到您选择的文件
您可以在crontab中完成这两个事情。但是我建议在脚本本身的第一行中进行操作:
#!/bin/bash
cd WHEREEVER_YOU_WANT
exec > YOUR_LOG_FILE 2&>1
脚本在用户的主目录中运行,文件也应在那里。如果您希望它与脚本相同的目录,则在脚本中执行cd
或修改crontab条目:
*/1 19-20 * * * cd /CS/day; /CS/day/get_info.sh
crontab条目的另一个常见问题是环境。如果脚本在您的终端中正常工作,请尝试调试它,当它从Cron运行时:
40 11 * * * bash -x /CS/day/get_info.sh >/tmp/get_info.sh.log 2>&1
仅在当前时间运行一次,因为否则您将每分钟覆盖日志文件。
在我的情况下,我只需要安装和配置SMTP客户端。