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执行定时任务却未能成功,不能生成缓存.本 ...
随机推荐
- java 日期递增
public static void main(String[] args) throws ParseException { // 方法一 // Format f = new SimpleDateFo ...
- CodeForces - 1089G
题目链接: http://codeforces.com/contest/1089/problem/G Example input Copy 3 2 0 1 0 0 0 0 0 100000000 1 ...
- 3.27模拟赛 sutoringu(后缀数组)
\(\color{white}{mjt是机房模拟赛独自切过题的唯一的人...}\) (应本人要求删掉惹) \(Description\) 给你\(n,k\)和长为\(n\)的字符串\(s\).一个区间 ...
- 2017-9-10-Vim使用说明
首先,很多linux发行版直接进入的是vi,不是vim,刚开始使用vi会有点蒙,需要改一下配置文件到vim:"打开vi编辑器,输入i,左下角没有出现-INSERT-字样,且编辑模式跟vim不 ...
- 【ACM】 1231 最大连续子序列
[1231 最大连续子序列 ** Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- python基础一 ------如何获取多个字典相同的键
需求: 足球赛第一场进去统计 {"A":3,"B":2,"C":1}足球赛第二场进去统计 {"A":3," ...
- (Android系统目录结构)目录预览
Android系统进入设备后,查看根目录下文件系统,如下: 重要目录和文件说明:mnt 挂载点目录etc 系统主要配置文件system Android 系统文件sys Linux 内核文件proc 运 ...
- ubuntu下使用nvm安装nodejs
sudo apt-get install curl curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install. ...
- Android 中的设计模式
1.单例模式 ContentProvider是单例模式,多个ContentResolver操作的都是同一个ContentProvider.
- Redis、Memcache、MongoDb的优缺点
Redis.Memcache.MongoDb的优缺点 Redis优点 支持多种数据结构,如 string(字符串). list(双向链表).dict(hash表).set(集合).zset(排序set ...