我有一个像下面的Shell脚本
echo "Hello World"
该脚本位于/root/scripts/
文件夹中作为test.sh
我也创build了一个像下面这样的cron工作
0-59 * * * * ./scripts/test.sh
现在cron作业不是每分钟都在test.sh
打印内容。
让我知道我是否给了一个错误的目录,或者在我的代码中有任何其他问题。
我会
/root/scripts/test.sh
执行。 我不知道cron会把什么视为当前目录 ...test.sh > /tmp/cron.log
(你可能想在某个阶段用2>&1
重定向stderr)。 否则,你不会看到输出 。 它被邮寄给cronjob所有者 chmod +x /root/scripts/test.sh
) #!/bin/sh
或类似的脚本是一个好习惯 让东西在cron下运行是非常棘手的。 克朗职位运行在一个大规模的削减环境。 将您的脚本可用的环境(使用env
)打印出来,并与您的交互式shell中可用的内容进行比较/对比是有益的。
你应该使用
* * * * * /path/to/scriptFile
为每分钟运行脚本
并检查您的脚本文件夹的所有者,如果所有者没有执行脚本的权限允许或更改拥有权限的所有者
在阅读Andrew的正确答案之后,对于那些仍在进行调试的人来说,下一个细节需要考虑:执行cronjob时,必须注意正在执行的脚本可用的环境变量。 在提供的示例中,脚本执行回显,在CENTOS6系统上的回显位于/ bin下。 echo命令是通过搜索$ PATH环境变量中列出的目录中的“echo”文件找到的。 如果cronjob PATH环境变量不包含/ bin,该怎么办? 在这种情况下,echo命令将失败。
要查看$ PATH环境变量的内容,请执行以下操作:
[mcchiz@bozo ~]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/export/home/mcchiz/bin
如果这是问题,最简单的解决方案是在脚本中明确地设置路径为“回声”。 要查看系统的完整回显路径,请在shell中输入“which echo”。
例:
[mcchiz@bozo ~]$ which echo /bin/echo
因此,在这种情况下,您将编辑脚本并将'echo'替换为'/ bin / echo'
下一个选项是在脚本中设置$ PATH变量来包含echo所在的目录。
如果需要进一步的信息来了解上述情况,研究“我正在运行什么shell以及我的环境变量是如何设置的?”,“什么shell是cron使用的,以及如何设置cron环境变量?”,“如何查看我的cronjob环境变量?”
当你在cron中添加文件的时候不能理解'./scripts/test.sh'。 所以你应该添加cron如下:
0-59 * * * * bash /root/scripts/test.sh
你可以添加文件的权限:
chmod a+x /root/scripts/test.sh
当脚本运行那个okey。