• 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
    
  • 相关阅读:
    jquery选择器(复习向)
    如何使元素/文字 垂直居中?
    mvc与mvvm的区别与联系
    python16_day26【crm 增、改、查】
    python16_day25【crm】
    python16_day24【restful、crm表构、认证】
    python16_day23【cmdb前端】
    django 【认证】
    python16_day22【cmdb注释】
    django【F和Q】
  • 原文地址:https://www.cnblogs.com/wswang/p/10278385.html
Copyright © 2020-2023  润新知