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
docker下创建crontab定时任务失败的更多相关文章
- 使用linux下的crontab定时任务跑定时脚本
使用linux下的crontab定时任务跑定时脚本 tags:定时任务 定时脚本 crontab linux定时脚本 linux 引言:应该有许多人曾经很好奇一些定时脚本是怎么做出来的.我们这次就来说 ...
- linux 下的 crontab 定时任务工具
以下内容转自:https://www.cnblogs.com/longjshz/p/5779215.html 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep c ...
- 利用cygwin创建windows下的crontab定时任务
要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Cygwin-1.7.35 下载地址 环境下载 什么是Cygwin Cygwin是一个在windows平台上运行的类U ...
- docker下创建redis cluster集群
概述 在Redis中,集群的解决方案有三种 主从复制 哨兵机制 Cluster Redis Cluster是Redis的分布式解决方案,在 3.0 版本正式推出. 准备工作 1.确定本机IP地址 2. ...
- 给debian的docker容器添加crontab定时任务
现在大部分的docke镜像是基于debian # cat /etc/issue Debian GNU/Linux 9 \n \l Docker容器是不支持后台服务的,像systemctl servic ...
- 在/etc/docker/下 创建daemon.json重新加载后docker无法启动问题 /etc/docker/daemon.json编辑不了 找不到
可能产生这个问题的原因至少有以下几个: 编辑daemon.json步骤不对:想要创建并编辑daemon.json,应该是先启动docker服务,此时系统自动产生/etc/docker目录,此时cat生 ...
- linux环境中,如何通过手动创建crontab文件的方式来设置crontab定时调度任务?
需求描述: 之前在创建定时任务的时候,都是通过cronab -e的方式进行创建,今天在做通过脚本部署定时任务的时候, 就想,通过crontab -e编辑的定时任务存放在哪个文件里,是否,可以手动的编辑 ...
- Windows下创建.gitgnore文件
相信使用过git的朋友可能遇到过,直接在windows下创建.gitgnore文件失败.类似截图那样 上网查了一下,有两种方法. 方法1: 此方法较为简单,前提是安装了git bash. 用git b ...
- linux下使用crontab实现定时PHP计划任务失败的原因分析
这篇文章主要介绍了linux下使用crontab实现定时PHP计划任务失败的原因分析,需要的朋友可以参考下 很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本 ...
随机推荐
- js获取form元素,不使用id
<form method="post" name="form"> <input type="text" name=&quo ...
- jmeter使用Beanshell预处理器从指定列表中获取随机值
变量mynation从列表{"china", "US", "UK"}中随机取值 String[] nation = new String[] ...
- C++多态实现原理详解
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数.如果对象类型是派生类,就调用派生类的函数:如果对象类型是基类 ...
- Django之模板2
模板2 一 . 母版 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- BZOJ.3307.雨天的尾巴(dsu on tree/线段树合并)
BZOJ 洛谷 \(dsu\ on\ tree\).(线段树合并的做法也挺显然不写了) 如果没写过\(dsu\)可以看这里. 对修改操作做一下差分放到对应点上,就成了求每个点子树内出现次数最多的颜色, ...
- 机器学习系列-tensorflow-01-急切执行API
tensorflow急切执行概述 Eager execution is an imperative, define-by-run interface where operations are exec ...
- go 单元测试时读取配置文件
在go项目中读取配置文件时,如果使用的是相对路径,在执行run test时也会在test文件所在的目录下去读取配置文件,如果文件没在此目录下会报错:“open env1.json: The syste ...
- LeetCode(509. 斐波那数)
问题描述: 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0, F(1) = 1 F(N) ...
- [JOISC2014]友だちをつくろう
[JOISC2014]友だちをつくろう 题目大意: 一个\(n(n\le10^5)\)个点,\(m(m\le2\times10^5)\)条边的有向图.对于两个点\(i,j\),如果存在一个点\(k\) ...
- jenkins部署node项目
docker run -d --name jenkins -p 8081:8080 -v /home/jenkins_home:/home/jenkins_home jenkins