[英]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
打印内容。
让我知道我是否给出了错误的目录,或者我的代码中有任何其他问题。
我会
/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中可用的内容进行比较/对比是有益的。
你应该使用
* * * * * /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.