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

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环境下的项目中就可以了。

 

 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章