Post

关于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执行环境不一样,可以通过以下方式增加环境:

  1. 在cron配置时增加环境变量配置,如下:
    1
    
      * * * * * . /etc/profile;/bin/sh /usr/local/services/nginx_site/html/misterchangray.github.io/gitupdate.sh 2>/tmp/test.log
    
  2. 在脚本头部增加以下内容引用环境变量
    1
    2
    3
    4
    
     #!/bin/sh
     . /etc/profile
     . ~/.bashrc
      
    
This post is licensed under CC BY 4.0 by the author.