我有一个如下所示的 Shell 脚本
echo "Hello World"
该脚本位于/root/scripts/
文件夹中test.sh
我还创建了一个如下所示的 cron 作业
0-59 * * * * ./scripts/test.sh
现在 cron 作业不是test.sh
每分钟都打印内容。
让我知道我是否给出了错误的目录或者我的代码中有任何其他问题。
我有一个如下所示的 Shell 脚本
echo "Hello World"
该脚本位于/root/scripts/
文件夹中test.sh
我还创建了一个如下所示的 cron 作业
0-59 * * * * ./scripts/test.sh
现在 cron 作业不是test.sh
每分钟都打印内容。
让我知道我是否给出了错误的目录或者我的代码中有任何其他问题。
我会
/root/scripts/test.sh
。我不知道 cron 会将什么视为当前目录...test.sh > /tmp/cron.log
(您可能希望在某个阶段也使用 重定向 stderr 2>&1
)。否则你不会看到输出。它被邮寄给 cronjob 所有者chmod +x /root/scripts/test.sh
)#!/bin/sh
或类似让东西在 cron 下运行是出了名的棘手。Cron 作业在大规模缩减的环境中运行。打印出脚本可用的环境(使用env
)并与交互式 shell 中可用的环境进行比较/对比是有益的。
新的 unix 用户在使用 cron 启动脚本时遇到的一个常见问题是他们的 cronjobs 无法访问与其用户 shell 相同的环境。因此,在用户的 shell 中执行的脚本可以完美运行,但从 cron 启动时会失败。在这种情况下,第一大罪魁祸首是你的 shell 的 $PATH 环境变量与 cronjob 的 shell 不同。
测试运行'/bin/echo $PATH > myShellPath'。在 cron 中运行 '/bin/echo $PATH > myCronPath'。比较 myShellPath 和 myCronPath。
在提供的示例中,脚本执行 echo,它在我的 CENTOS6 系统上位于 /bin 下。shell 通过在 $PATH 环境变量中列出的目录之一中搜索“echo”文件来找到 echo 命令。如果您的 cronjob 的 $PATH 环境变量不包含 /bin,则 echo 命令将失败。
如果这是问题所在,最简单的解决方案是在脚本中明确设置“echo”的路径。要查看系统的完整 echo 路径,请在 shell 中键入“which echo”。
例子:
[countChocula@bozo ~]$ which echo
/bin/echo
在这种情况下,您将编辑脚本并将“echo”替换为“/bin/echo”。更好的是,在脚本中设置 $PATH 变量以包含 echo 所在的目录。
有关更多信息,请研究“我正在运行什么 shell,我的环境变量是如何设置的?”、“cron 使用什么 shell 以及如何设置 cron 环境变量?”、“如何查看我的 cronjob 的环境变量?”
你应该使用
* * * * * /path/to/scriptFile
每分钟运行脚本
如果所有者没有执行脚本的权限,请检查脚本文件夹的所有者授予权限或更改具有权限的所有者
当您在 cron 中添加文件时不理解 './scripts/test.sh'。因此,您应该按如下方式添加 cron:
0-59 * * * * bash /root/scripts/test.sh
并且您将文件权限添加为:
chmod a+x /root/scripts/test.sh
当脚本运行那个好的。