关于cron执行失败原因分析及查找
这几天想将博客迁移到我服务器上,因为baidu不能收录到github的内容.
于是想了个方案,思路如下:
- 从github将仓库pull到服务器上
- 使用nginx作为web服务器
- 服务器建一个脚本,每5分钟从拉取一次,然后再编译下就ok
思路很简单,但是实践的时候出现了不少问题,特此记录一下。
第一个问题
脚本写好并配置到crontab 后, 不执行,也不知道是出了啥问题。此时可以在cron中加入以下代码将错误进行输出:
1
* * * * * /usr/local/services/nginx_site/html/misterchangray.github.io/gitupdate.sh 2>/tmp/test.log
注意后面的2>/tmp/test.log
,此语句意思是将错误输出到这个日志文件中。
第二个问题
此时可以通过日志排查问题,定位到原因是脚本在cron执行时没有相关环境变量,baidu搜索后得知cron脚本执行和直接shell执行环境不一样,可以通过以下方式增加环境:
- 在cron配置时增加环境变量配置,如下:
1
* * * * * . /etc/profile;/bin/sh /usr/local/services/nginx_site/html/misterchangray.github.io/gitupdate.sh 2>/tmp/test.log
- 在脚本头部增加以下内容引用环境变量
1 2 3 4
#!/bin/sh . /etc/profile . ~/.bashrc
This post is licensed under CC BY 4.0 by the author.