zoukankan      html  css  js  c++  java
  • 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就可以看到定时任务正常执行,不再产生邮件

     

  • 相关阅读:
    Request Validation in ASP.NET
    ANSI、Unicode、Unicode big endian、UTF8编码
    在win7下安装SQL sever2005
    配置SQL Server 2005 以允许远程连接
    传统网站与Web标准——DIV+CSS布局实例
    打造自己的reset.css
    传统网站与Web标准——表格布局实例
    每天工作4小时的程序员
    良好的XHTML规则
    列表导航栏实例(02)——精美电子商务网站赏析
  • 原文地址:https://www.cnblogs.com/fivedays/p/12580850.html
Copyright © 2011-2022 走看看