繁体   English   中英

如何通过Cron Job运行Shell脚本

[英]How to run a Shell Script by Cron Job

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

 echo "Hello World"

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

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

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

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

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

我会

  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. 明确哪个脚本可执行文件将执行您的shell脚本。 在顶部进行脚本调用是很好的做法,例如#!/bin/sh或类似的

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

你应该使用

* * * * * /path/to/scriptFile

每分钟运行脚本

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

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

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

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

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

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

当脚本运行那个okey时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM