如何通过Cron Job运行Shell脚本

时间:2012-08-13 10:00:05

标签: linux cron crontab ubuntu-10.04

我有一个像下面这样的Shell脚本

 echo "Hello World"

该脚本位于/root/scripts/ <{1}}

test.sh文件夹中

我还创建了一个类似下面的cron作业

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

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

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

4 个答案:

答案 0 :(得分:5)

我会

  1. 明确表示。你的目录要从例如/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. 的执行权限
  5. 明确哪个脚本可执行文件将执行您的shell脚本。最好在顶部进行脚本调用,例如#!/bin/sh或类似的
  6. 在cron下运行东西是非常棘手的。 Cron工作在大规模减少的环境中运行。打印出脚本可用的环境(使用env)并与交互式shell中可用的内容进行比较/对比是有益的。

答案 1 :(得分:1)

你应该使用

* * * * * /path/to/scriptFile

每分钟运行脚本

并检查脚本文件夹的所有者,如果所有者没有执行脚本给予权限或更改拥有权限的所有者

答案 2 :(得分:0)

新的unix用户在使用cron启动脚本时遇到的一个常见问题是,他们的cronjobs无法访问与其用户shell相同的环境。因此,在用户shell中执行的脚本运行完美,但从cron启动时失败。在这种情况下,头号问题是你的shell的$ PATH环境变量与cronjob的shell不同。

测试运行&#39; / bin / echo $ PATH&gt; myShellPath&#39 ;.在cron run&#39; / bin / echo $ PATH&gt; myCronPath&#39 ;.将myShellPath与myCronPath进行比较。

在提供的示例中,脚本执行echo,在我的CENTOS6系统上找到/ bin。 shell通过搜索“回声”找到echo命令。文件在$ PATH环境变量中列出的目录之一。如果您的cronjob的$ PATH环境变量不包含/ bin,则echo命令将失败。

如果这是问题,最简单的解决方案是明确设置“回声”的路径。在你的脚本中。要查看系统的回音完整路径,请键入&#39;回显&#39;在你的壳上。

示例:

[countChocula@bozo ~]$ which echo
/bin/echo

在这种情况下,您可以编辑脚本并替换“回声”。与&#39; / bin / echo&#39;。更好的是,在脚本中设置$ PATH变量以包含echo所在的目录。

有关更多信息,研究&#34;我在运行什么shell以及我的环境变量如何设置?&#34;,&#34; cron使用什么shell以及如何设置cron环境变量?&# 34;,&#34;如何查看我的cronjob的环境变量?&#34;

答案 3 :(得分:0)

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

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

您将文件的权限添加为:

# l is the vertical axis
y0 y1 y2 y3 y4
y1 y2 y3 y4 
y2 y3 y4
y3 y4
y4

当脚本运行那个okey时。