diff --git "a/_posts/2023-12-08-\345\205\263\344\272\216cron\346\211\247\350\241\214\345\244\261\350\264\245\345\216\237\345\233\240\345\210\206\346\236\220\345\217\212\346\237\245\346\211\276.md" "b/_posts/2023-12-08-\345\205\263\344\272\216cron\346\211\247\350\241\214\345\244\261\350\264\245\345\216\237\345\233\240\345\210\206\346\236\220\345\217\212\346\237\245\346\211\276.md" new file mode 100644 index 0000000..2efd48c --- /dev/null +++ "b/_posts/2023-12-08-\345\205\263\344\272\216cron\346\211\247\350\241\214\345\244\261\350\264\245\345\216\237\345\233\240\345\210\206\346\236\220\345\217\212\346\237\245\346\211\276.md" @@ -0,0 +1,41 @@ +--- +layout: post +title: "关于cron执行失败原因分析及查找" +date: 2023-12-08 13:29:20 +0800 +categories: + - 杂项 +tags: + - cron定时任务 + - cron异常排查定位 + +--- + +这几天想将博客迁移到我服务器上,因为baidu不能收录到github的内容. + +于是想了个方案,思路如下: +- 从github将仓库pull到服务器上 +- 使用nginx作为web服务器 +- 服务器建一个脚本,每5分钟从拉取一次,然后再编译下就ok + +思路很简单,但是实践的时候出现了不少问题,特此记录一下。 + +#### 第一个问题 +脚本写好并配置到crontab 后, 不执行,也不知道是出了啥问题。此时可以在cron中加入以下代码将错误进行输出: +```shell +* * * * * /usr/local/services/nginx_site/html/misterchangray.github.io/gitupdate.sh 2>/tmp/test.log +``` +注意后面的`2>/tmp/test.log`,此语句意思是将错误输出到这个日志文件中。 + +#### 第二个问题 +此时可以通过日志排查问题,定位到原因是脚本在cron执行时没有相关环境变量,baidu搜索后得知cron脚本执行和直接shell执行环境不一样,可以通过以下方式增加环境: +- 在cron配置时增加环境变量配置,如下: + ``` shell + * * * * * . /etc/profile;/bin/sh /usr/local/services/nginx_site/html/misterchangray.github.io/gitupdate.sh 2>/tmp/test.log + ``` +- 在脚本头部引用环境变量 + ```shell + #!/bin/sh +. /etc/profile +. ~/.bashrc + + ```