2012-08-13 148 views
2

我有一个shell脚本像下面如何通过cron作业来运行一个shell脚本

echo "Hello World" 

的脚本位于/root/scripts/文件夹test.sh

我还创建了一个cron作业像下面

0-59 * * * * ./scripts/test.sh 

现在cron作业不是每分钟都在test.sh中打印内容。

让我知道我是否给了一个错误的目录,或者我的代码中有任何其他问题。

回答

5

我会

  1. 要明确WRT。您的目录要从例如/root/scripts/test.sh。我不知道什么cron会认为目前目录
  2. 将stdout重定向到日志文件例如, ...test.sh > /tmp/cron.log(您可能想在某个阶段使用2>&1重定向stderr)。 否则,你不会看到输出。它被邮寄到cronjob所有者
  3. 请确保您已授予您的bash脚本执行权限(chmod +x /root/scripts/test.sh
  4. 请明确指出哪个脚本可执行文件将执行您的shell脚本。最好在顶部有一个脚本调用,例如#!/bin/sh或类似

让东西在cron下运行是非常棘手的。克朗职位在大规模裁员的环境下运行。打印出脚本可用的环境(使用env)并与您的交互式shell提供的内容进行比较/对比是有益的。

+0

脚本执行完毕后,我可以在终端看到hello world? – user1093513 2012-08-13 10:12:43

+0

不,cron命令的输出通过电子邮件发送给crontab的所有者。 – 2012-08-13 10:55:51

+0

@DouglasLeeder - thx重新发邮件。我已经在回答 – 2012-08-13 11:43:33

1

你应该使用

​​

运行脚本的每分钟

,并检查你的脚本文件夹的所有者,如果车主没有PERMSSION执行脚本给谁有权

许可或更改所有者
+0

嗨,我写了一个脚本,如果我用cron手动使用它,但在cron上它不起作用。这是我的cron:* * * * * sudo /opt/modulo/log/check.sh如果你能帮助我我会很高兴 – Tomer 2017-05-14 12:17:22

0

在阅读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的环境变量?“

0

当您在cron中添加文件时不能理解'./scripts/test.sh'。所以,你应该添加如下的cron:

0-59 * * * * bash /root/scripts/test.sh 

与您文件添加权限为:

chmod a+x /root/scripts/test.sh 

当脚本运行该奥基。

相关问题