创建过程

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

  1. # crontab jobs
  2. RUN yum -y install crontabs
  3. ADD ./run/nlp-cron /etc/cron.d/nlp-cron
  4. RUN chmod 0644 /etc/cron.d/nlp-cron
  5. RUN crontab /etc/cron.d/nlp-cron

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

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

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

排错1

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

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

排错2

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

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

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

排错3

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

  1. export LD_LIBRARY_PATH=/usr/lib/xxx:$LD_LIBRARY_PATH
  2. export PATH

排错4

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

  1. #
  2. # The PAM configuration file for the cron daemon
  3. #
  4. #
  5. # No PAM authentication called, auth modules not needed
  6. account required pam_access.so
  7. account include password-auth
  8. session sufficient pam_loginuid.so
  9. session include password-auth
  10. auth include password-auth

排错5

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

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

  1. docker exec -it container_id crond restart

docker下创建crontab定时任务失败的更多相关文章

  1. 使用linux下的crontab定时任务跑定时脚本

    使用linux下的crontab定时任务跑定时脚本 tags:定时任务 定时脚本 crontab linux定时脚本 linux 引言:应该有许多人曾经很好奇一些定时脚本是怎么做出来的.我们这次就来说 ...

  2. linux 下的 crontab 定时任务工具

    以下内容转自:https://www.cnblogs.com/longjshz/p/5779215.html 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep c ...

  3. 利用cygwin创建windows下的crontab定时任务

    要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Cygwin-1.7.35 下载地址 环境下载 什么是Cygwin Cygwin是一个在windows平台上运行的类U ...

  4. docker下创建redis cluster集群

    概述 在Redis中,集群的解决方案有三种 主从复制 哨兵机制 Cluster Redis Cluster是Redis的分布式解决方案,在 3.0 版本正式推出. 准备工作 1.确定本机IP地址 2. ...

  5. 给debian的docker容器添加crontab定时任务

    现在大部分的docke镜像是基于debian # cat /etc/issue Debian GNU/Linux 9 \n \l Docker容器是不支持后台服务的,像systemctl servic ...

  6. 在/etc/docker/下 创建daemon.json重新加载后docker无法启动问题 /etc/docker/daemon.json编辑不了 找不到

    可能产生这个问题的原因至少有以下几个: 编辑daemon.json步骤不对:想要创建并编辑daemon.json,应该是先启动docker服务,此时系统自动产生/etc/docker目录,此时cat生 ...

  7. linux环境中,如何通过手动创建crontab文件的方式来设置crontab定时调度任务?

    需求描述: 之前在创建定时任务的时候,都是通过cronab -e的方式进行创建,今天在做通过脚本部署定时任务的时候, 就想,通过crontab -e编辑的定时任务存放在哪个文件里,是否,可以手动的编辑 ...

  8. Windows下创建.gitgnore文件

    相信使用过git的朋友可能遇到过,直接在windows下创建.gitgnore文件失败.类似截图那样 上网查了一下,有两种方法. 方法1: 此方法较为简单,前提是安装了git bash. 用git b ...

  9. linux下使用crontab实现定时PHP计划任务失败的原因分析

    这篇文章主要介绍了linux下使用crontab实现定时PHP计划任务失败的原因分析,需要的朋友可以参考下   很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本 ...

随机推荐

  1. vs各种版本

    文件名称 文件大小 百度网盘下载 微软官方下载 Visual Studio 2015 Enterprise - 企业版 - 简体中文 3.89GB http://pan.baidu.com/s/1bn ...

  2. 数据库——MongoDB的安装

    1.进入到 /usr/local/ 目录: 1 cd /usr/local 2.安装必要插件 yum -y install gcc make gcc-c++ openssl-devel wget yu ...

  3. [PA2014]Fiolki

    [PA2014]Fiolki 题目大意: 有\(n(n\le2\times10^5)\)种不同的液体物质和\(n\)个容量无限的药瓶.初始时,第\(i\)个瓶内装着\(g_i\)克第\(i\)种液体. ...

  4. BZOJ4437 : [Cerc2015]Looping Labyrinth

    从$(0,0)$开始BFS$2\times10^6$步,那么迷宫的形状有三种: 1.走不完$2\times10^6$步,直接判定即可. 2.可以走到$(n,0)$以及$(0,m)$,那么直接把询问点平 ...

  5. python系统编程(五)

    多线程-threading python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用 1. 使用threading模块 ...

  6. java第一次课

    package java第一周学习2; 达达20173435 信1705-2 import java.text.SimpleDateFormat; import java.util.Date; pub ...

  7. eclipse中安装pydev插件出现duplicate location

    eclipse中安装pydev插件出现duplicate location,主要是因为之前已经填写了该地址并且已经加载了,具体的解决办法见下链接: http://jingyan.baidu.com/a ...

  8. share_ptr_c++11

    C++智能指针 shared_ptr shared_ptr 是一个标准的共享所有权的智能指针, 允许多个指针指向同一个对象. 定义在 memory 文件中(非memory.h), 命名空间为 std. ...

  9. weblogic 下异常 org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken

    项目之前在 Tomcat 环境下一直都正常运行,今天应客户要求需要迁移到 webLogic 10.3.6 下, 部署后竟然抛出了 org.hibernate.QueryException: Class ...

  10. Vue(九)小案例 - 百度搜索列表(跨域)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...