linux普通用户设置定时任务crontab失败的排查过程

总结:

处理问题之后,先把经验总结一下,步骤可分为以下几步:

1、检查定时任务crontab服务是否已正常启动,service crond status

2、检查定时任务的命令是否有错,如果执行了脚本,也需要检查脚本是否有错,特别是输入输出文件时注意文件的绝对路径、脚本的执行权限,最好先手工执行以下脚本,确保脚本可正常执行。

3、检查crond服务正常启动,又看不出来自己的定时任务命令跟脚本命令有什么问题,那就只能一步步看日志去排查问题了。

为了节省篇幅,下文隐去了1、2两个步骤的操作。

处理过程:

安装了一个postgres数据库,为了备份数据库,就写了个备份脚本,在执行crontab -e添加定时任务,结果发现/var/log/cron日志中有相关记录,但是无报错信息。

 

但是执行并没有成功。

一般情况下,当定时任务执行失败时,如果没有屏蔽错误时,系统会发送一个系统邮件到/var/spool/mail/root,但是仔细一开下面那条日志,发现发送日志失败了:

 

所以日志并没有生成,此时去需要去查看邮件日志/var/log/maillog,

 

百度一下找到解决方案:

vi  /etc/postfix/main.cf

修改inet_interfaces参数值为all

 

此时需要注意上面的提示,修改参数之后需重启postfix服务,

service postfix restart

处理完发送系统邮件的问题之后,就可以去查看定时任务失败的邮件了,为了快速产生邮件,可以设置定时任务一分钟执行一次,等问题解决之后在调整为正常周期。

vi /var/spool/mail/root

 

此时发现了是postgres命令找不到,查看定时任务找到哪里使用了这条命令,如果定时命令中执行了脚本,那么也需要检查脚本内容:

crontab -e

 

发现了是自己填写的定时任务有问题,root通过直接编辑/etc/crontab文件的方式来添加定时任务时,可以指定执行用户,但是如果使用了crontab -e来添加的任务,是没有指定执行用户这个参数的,因此我这样写的定时任务,会把postgres认为是一个命令,然后报错命令不存在,无法执行,此时只需要把postgres去掉即可

 

然后查看日志/var/log/cron就可以看到定时任务正常执行,不再产生邮件

 

 

posted @ 2020-03-27 13:39  何为实施  阅读(3652)  评论(0编辑  收藏  举报