4

我有一个如下所示的 Shell 脚本

 echo "Hello World"

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

我还创建了一个如下所示的 cron 作业

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

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

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

4

4 回答 4

7

我会

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

让东西在 cron 下运行是出了名的棘手。Cron 作业在大规模缩减的环境中运行。打印出脚本可用的环境(使用env)并与交互式 shell 中可用的环境进行比较/对比是有益的。

于 2012-08-13T10:02:37.223 回答
3

新的 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 的环境变量?”

于 2014-04-05T16:10:28.100 回答
1

你应该使用

* * * * * /path/to/scriptFile

每分钟运行脚本

如果所有者没有执行脚本的权限,请检查脚本文件夹的所有者授予权限或更改具有权限的所有者

于 2013-08-31T04:36:25.067 回答
0

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

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

并且您将文件权限添加为:

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

当脚本运行那个好的。

于 2017-01-16T03:11:28.167 回答