Skip to content

Crontab 或 Incron 执行 Shell 脚本的问题排查

Published: at 10:18 AMSuggest Changes

前一阵子碰到了个玄学问题,就是 crontab 不执行 shell 脚本。 在命令行下可以正常执行,然而 crontab 下不行,incron 更不行。 折腾了一天,总算找到了解决方法

解决方法

脚本务必放在 root 文件夹下

个人的经验把,放在 root 文件夹下,也就是用户目录下,crontab 或则 incron 才能方便执行

设置脚本的环境变量,在脚本前插入 PATH

这个比较重要,在命令行下执行:

echo $PATH

将返回的环境变量复制出来,插入到前面,如下

PATH=/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/home/x/bin

给脚本执行权限,提取

chmod a+x shell.sh
chmod 777 shell.sh
chmod +x shell.sh

其他

查找执行文件的真正路径

有时候

hexo g

是不能直接执行的 可以试试

which hexo

查找一下 hexo 运行文件的真正路径。

脚本调试

如果你不清楚脚本哪儿错误了 这样记录错误信息到 log 文件中 crontab 可以这样:

*/1 * * * *cd  /root/ && ./runhexo.sh >> /root/runhexoerror.log 2>&1

其中 /root/runhexoerror.log 便是日志文件了,你可以查看返回的错误信息,根据错误信息调试你的脚本。

什么是#!/bin/sh

#!/bin/sh

是指定脚本解释器 比如我用

#!/usr/bin/php

就是用 php 模块执行 php 文件

总结

上面几点看上去简单,实际上,他们花去我很多的时间。我查了很多的资料才注意到这些。 所以说,基础一定要扎实,我也不是专业写脚本的,所以碰到这些问题。


Previous Post
未来的规划
Next Post
基于 Oneinstack 配置 Nginx 的 Google Fonts 反向代理