DockerFlie中设置crontab定时任务,以及new crontab file is missing newline before EOF, can‘t install.错误的解决方法

4 篇文章 2 订阅
3 篇文章 4 订阅

DockerFlie中设置crontab定时任务

new crontab file is missing newline before EOF, can't install.错误的解决方法

问题描述:(系统ubuntu)

想要在docker容器创建时就自动新建一个crontab定时任务,用于项目打包成docker容器时可以定时在容器中执行一些命令

解决方法:

首先,在项目目录下创建crontab文件cron-file,如图:

文件内容就是crontab命令,每天凌晨2点10分执行名为run_timed_task.sh的shell脚本:cron-file

10 2 * * * /usr/src/app/run_timed_task.sh &>/dev/null 2>&1

创建文件后,在DockerFile文件中 添加以下命令:

RUN chmod +x /usr/src/app/run_timed_task.sh     #给要执行的shell脚本相应的权限
RUN apt-get update                              #更新apt
RUN apt-get install cron                        #安装crontab
RUN service cron start                          #启动crontab
RUN apt-get -y install vim                      #安装vim(可以不安装)
RUN crontab /usr/src/app/cron-file              #添加cron-file中的内容到crontab中

添加完crontab代码后,需要重启cron服务,不能在dockerfile中使用 

RUN service cron restart

因为RUN命令用于构建映像,它与CMD非常不同,CMD告诉docker当图像变成容器时要运行什么。因此,对于需要在容器中运行的进程,需要将其作为CMD或ENTRYPOINT的一部分,而又因为CMD只能运行最后一个,所以想要既运行

service cron restart 又想运行 python3 -u run.py

就要用CMD执行shell脚本,在脚本中运行这两个命令,其中shell脚本如下

#! /bin/bash
service cron restart ; python3 -u run.py

到此结束。

这样创建出的docker容器自动会加上定时任务,可以进入容器 使用crontab -e 查看。

遇到的问题:

在执行 下面的代码时 

crontab /usr/src/app/cron-file

会报错:new crontab file is missing newline before EOF, can't install.

引起这个错是因为cron-file文件的编码问题,因为我在win系统中新建的这个文件。

解决方法:

在linux系统中用vim新建此文件,编辑好之后复制到win环境下的项目中就可以了。

 

 

原创博文,转载请标明出处。

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值