zoukankan      html  css  js  c++  java
  • docker下创建crontab定时任务失败

    创建过程

    基础镜像采用的centos7.2,需要安装一下crontab,在dockerfile中加以下语句就可以了:

    # crontab jobs
    RUN yum -y install crontabs
    ADD ./run/nlp-cron /etc/cron.d/nlp-cron
    RUN chmod 0644 /etc/cron.d/nlp-cron
    RUN crontab /etc/cron.d/nlp-cron
    

    其中nlp-cron是定时任务的配置,内容是下面这样的:

    * * * * *  sh test.sh >/dev/null 2>&1
    

    后来启动了镜像,发现定时任务并不能正常启动,于是开启了漫长的排错过程。

    排错1

    首先进入docker的容器,用crontab -l看了一下,任务实际上是存在的,可以证明是任务没有启动/执行成功而已。

    同时在容器中,执行了一下想要做的操作,发现没有任何问题,说明代码没有问题。

    排错2

    创建镜像的过程是参考这里做的,按理说不缺什么步骤,于是又按照他的过程重新弄了一下,发现系统命令可以执行。

    此时又问了一下同事,说最好用全路径。我本身执行的是python命令,于是whereis python找了一下全路径,改了之后,发现还是没有执行成功。

    于是在py文件里加了各种print,发现一个问题写文件的操作不能执行……经同事提醒,试了一下全路径,居然改好了。

    排错3

    过了2天,功能完善后,想打包再试一下,发现又不行了……这次日志显示的是缺一个环境变量,于是找了半天办法。最终,在bash_profile中添加了环境变量,才解决了这个问题。

    export LD_LIBRARY_PATH=/usr/lib/xxx:$LD_LIBRARY_PATH
    
    export PATH
    

    排错4

    在排错期间,网上很多人说到是权限验证的问题。要改下面这个地方,/etc/pam.d/crond:

    #
    # The PAM configuration file for the cron daemon
    #
    #
    # No PAM authentication called, auth modules not needed
    account    required   pam_access.so
    account    include    password-auth
    session    sufficient   pam_loginuid.so
    session    include    password-auth
    auth       include    password-auth
    

    排错5

    打包之后,起了容器,可能还会遇到不执行的问题,此时可以尝试重启crontab。试了一下在dockerfile中加 RUN crond restart,发现不管用。

    此时可以尝试起了容器之后,执行一个下面的命令:

    docker exec -it container_id crond restart
    
  • 相关阅读:
    机器学习(深度学习)
    机器学习(六)
    机器学习一-三
    Leetcode 90. 子集 II dfs
    Leetcode 83. 删除排序链表中的重复元素 链表操作
    《算法竞赛进阶指南》 第二章 Acwing 139. 回文子串的最大长度
    LeetCode 80. 删除有序数组中的重复项 II 双指针
    LeetCode 86 分割链表
    《算法竞赛进阶指南》 第二章 Acwing 138. 兔子与兔子 哈希
    《算法竞赛进阶指南》 第二章 Acwing 137. 雪花雪花雪花 哈希
  • 原文地址:https://www.cnblogs.com/wswang/p/10278385.html
Copyright © 2011-2022 走看看