【问题标题】:How to run a Shell Script by Cron Job如何通过 Cron Job 运行 Shell 脚本
【发布时间】:2012-08-09 13:07:59
【问题描述】:

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

 echo "Hello World"

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

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

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

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

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

【问题讨论】:

    标签: linux cron crontab ubuntu-10.04


    【解决方案1】:

    我愿意

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

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

    【讨论】:

    • 一旦脚本被执行,我可以在终端看到hello world,对吗?
    • 不,cron 命令的输出通过电子邮件发送给 crontab 的所有者。
    • @DouglasLeeder - 感谢重新邮寄说明。我已将其包含在答案中
    【解决方案2】:

    unix 新用户在使用 cron 启动脚本时遇到的一个常见问题是,他们的 cronjob 无法访问与其用户 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 的环境变量? "

    【讨论】:

      【解决方案3】:

      你应该使用

      * * * * * /path/to/scriptFile
      

      每分钟运行一次脚本

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

      【讨论】:

      • 您好,我编写了一个脚本,如果我在不使用 cron 的情况下手动使用它时效果很好,但在 cron 上它不起作用。这是我的 cron:* * * * * sudo /opt/modulo/log/check.sh 如果你能帮助我,我会很高兴
      【解决方案4】:

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

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

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

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

      当脚本运行那个好的。

      【讨论】:

        猜你喜欢
        • 2017-08-11
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        • 2016-10-01
        • 2014-05-16
        • 1970-01-01
        • 2019-07-23
        • 2011-01-01
        相关资源
        最近更新 更多