如何通过cron作业来运行一个shell脚本
我有一个shell脚本像下面如何通过cron作业来运行一个shell脚本
echo "Hello World"
的脚本位于/root/scripts/
文件夹test.sh
我还创建了一个cron作业像下面
0-59 * * * * ./scripts/test.sh
现在cron作业不是每分钟都在test.sh
中打印内容。
让我知道我是否给了一个错误的目录,或者我的代码中有任何其他问题。
我会
- 要明确WRT。您的目录要从例如
/root/scripts/test.sh
。我不知道什么cron会认为目前目录 - 将stdout重定向到日志文件例如,
...test.sh > /tmp/cron.log
(您可能想在某个阶段使用2>&1
重定向stderr)。 否则,你不会看到输出。它被邮寄到cronjob所有者 - 请确保您已授予您的bash脚本执行权限(
chmod +x /root/scripts/test.sh
) - 请明确指出哪个脚本可执行文件将执行您的shell脚本。最好在顶部有一个脚本调用,例如
#!/bin/sh
或类似
让东西在cron下运行是非常棘手的。克朗职位在大规模裁员的环境下运行。打印出脚本可用的环境(使用env
)并与您的交互式shell提供的内容进行比较/对比是有益的。
你应该使用
运行脚本的每分钟
,并检查你的脚本文件夹的所有者,如果车主没有PERMSSION执行脚本给谁有权
许可或更改所有者嗨,我写了一个脚本,如果我用cron手动使用它,但在cron上它不起作用。这是我的cron:* * * * * sudo /opt/modulo/log/check.sh如果你能帮助我我会很高兴 – Tomer 2017-05-14 12:17:22
在阅读Andrew的正确答案之后,对于那些仍在进行调试的人来说,下一个细节需要考虑:执行cronjob时,必须知道正在执行的脚本可用的环境变量。在提供的示例中,脚本执行回显,在CENTOS6系统上的回显位于/ bin下。 echo命令是由shell通过搜索$ PATH环境变量中列出的目录中的'echo'文件找到的。如果cronjob PATH环境变量不包含/ bin,该怎么办?在这种情况下,echo命令将失败。
要查看你的$ PATH环境变量的内容做:
[[email protected] ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/export/home/mcchiz/bin
如果是这样的问题,最简单的解决方法是明确设置的路径,“回响”在你的脚本。要查看系统的回显完整路径,请在shell中输入'which echo'。
例子:
[[email protected] ~]$ which 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
当脚本运行该奥基。
脚本执行完毕后,我可以在终端看到hello world? – user1093513 2012-08-13 10:12:43
不,cron命令的输出通过电子邮件发送给crontab的所有者。 – 2012-08-13 10:55:51
@DouglasLeeder - thx重新发邮件。我已经在回答 – 2012-08-13 11:43:33