美文网首页
一个crontab不运行问题的坑

一个crontab不运行问题的坑

作者: qboy0000 | 来源:发表于2020-04-25 00:52 被阅读0次

    由于需要在脚本中添加crontab,因此需要通过脚本来向crontab中添加命令,大致脚本如下。

    TMP_CRON=/tmp/tmp_cron
    rm -rf $TMP_CRON
    #crontab -u root -l
    echo `crontab -u root -l` >> $TMP_CRON
    if [ `grep -c "rsync.sh" $TMP_CRON` -eq 0 ]; then
        cronjob="*/1 * * * * rsync.sh >> /var/log/rsync.log"
        echo "$cronjob" >> $TMP_CRON
        crontab -u root $TMP_CRON
    fi
    

    执行完上面的语句之后执行crontab -l发现已将任务添加上了,于是就放心没管,过了一段时间却发现没有执行成功,很奇怪,但是同样的,使用crontab -e手动添加的一样的语句却执行成功了。于是让我非常苦恼,不知道什么问题。

    查看cron日志

    本来想直接查看/var/log目录下是否有cron的日志,发现并没有cron日志,根据[2],原来cron的日志需要通过syslog来管理,于是参照[2]进行设定

    # 修改rsyslog
    sudo vim /etc/rsyslog.d/50-default.conf
    cron.*              /var/log/cron.log #将cron前面的注释符去掉 
    # 重启rsyslog
    sudo  service rsyslog  restart
    # 查看crontab日志
    less  /var/log/cron.log 
    

    设定权限并重启cron

    查看cron.log发现以下一句话

    (root) INSECURE MODE (mode 0600 expected) (crontabs/root)
    

    原来这是导致运行失败的原因,与[3]相似。根据其说明/var/spool/cron/crontabs/root的文件权限应该为600,而使用上面的权限生成的文件权限是644,因此权限失败。
    因此在上面脚本中添加以下的语句

    chmod 600 /var/spool/cron/crontabs/root
    systemctl restart cron
    

    至此,任务即可正常的运行,问题解决。

    参考链接

    1. https://www.virtualmin.com/node/54973
    2. https://blog.csdn.net/woshiliulei0/article/details/54136885
    3. https://blog.csdn.net/u012129468/article/details/77926701

    相关文章

      网友评论

          本文标题:一个crontab不运行问题的坑

          本文链接:https://www.haomeiwen.com/subject/iyazmhtx.html