crontab 或者 incron 执行 shell 脚本

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

解决方法

脚本务必放在 root 文件夹下

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

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

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

1
echo $PATH

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

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

给脚本执行权限

1
chmod a+x shell.sh

其他

查找执行文件的真正路径

有时候

1
hexo g

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

1
which hexo

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

脚本调试

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

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

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

什么是 #!/bin/sh

1
#!/bin/sh

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

1
#!/usr/bin/php

就是用 php 模块执行 php 文件

总结

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

坚持原创技术分享,您的支持将鼓励我继续创作!