我正在尝试从Freebsd上的cron执行shell脚本。
为了测试crontab
是否正常工作,我写了一行
* * * * * echo "Hello" > /home/myuser/logile
它工作正常。
但是当试图执行任何脚本时,它不会做任何事情,甚至不会出错。 (在我试图运行的脚本中只是相同的echo命令)
以下是crontab -l
:
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
HOME=/home/myuser
MAILTO=myuser
* * * * * /home/myuser/shellscript.sh > /home/myuser/logfile
为什么脚本没有被执行,虽然crontab
显然正在运行?
所有文件的权限都设置为rwxr-xr-x
。
答案 0 :(得分:3)
您是否检查过命令行在行尾有换行符/ CR?当我用crontab -e编辑cron作业时,当我在行尾没有按下输入时,我挣扎了几个小时试图找到cron上不执行php脚本的原因: - )
答案 1 :(得分:2)
您是否检查了/var/log/cron
的线索?
答案 2 :(得分:2)
* * * * * /bin/sh /home/myuser/shellscript.sh
或
* * * * * /bin/bash /home/myuser/shellscript.sh
以root用户身份在Mac Os X 10.6中为我工作
答案 3 :(得分:1)
你试过吗
* * * * * /bin/sh /home/myuser/shellscript.sh > /home/myuser/logfile
答案 4 :(得分:1)
cron通过电子邮件将任何错误发送给crontab文件的所有者(通常是“root”,因此您可以检查该帐户的电子邮件)。要将任何错误邮寄到“crontabOnFreebsd”,请输入:
MAILTO=crontabOnFreebsd
在你的crontab中(靠近顶部)。
有关详细信息,请发出以下命令:
man 5 crontab
答案 5 :(得分:0)
如果您收到错误,那么您的日志文件可能无法捕获它,请尝试以下操作:
* * * * * /home/myuser/shellscript.sh > /home/myuser/logfile 2> /home/myuser/errorfile
我做了任何cron的事情已经有一段时间了;但总是习惯性的东西:
未设置环境变量:通常我发现有必要为所有命令设置完整路径(甚至像'cat'之类的东西)[或者至少在脚本本身中设置ENV变量]。
确保拥有脚本等的用户确实是运行脚本的用户:当您从交互式shell进行测试时,这可能不是同一个用户。脚本可能写入的目录/文件也是如此。
另外:查看root用户的电子邮件 - 您可能会发现错误已转移到收件箱,这可能会帮助您进一步排查问题。