我有一个像下面这样的Shell脚本
echo "Hello World"
该脚本位于/root/scripts/
<{1}}
test.sh
文件夹中
我还创建了一个类似下面的cron作业
0-59 * * * * ./scripts/test.sh
现在,cron作业不是每分钟都在test.sh
打印内容。
让我知道我是否给出了错误的目录,或者我的代码中有任何其他问题。
答案 0 :(得分:5)
我会
/root/scripts/test.sh
。我不知道cron会将其视为当前的目录...test.sh > /tmp/cron.log
(您可能希望在某个阶段使用2>&1
重定向stderr)。 否则你不会看到输出。它被邮寄给cronjob所有者chmod +x /root/scripts/test.sh
)#!/bin/sh
或类似的在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时。