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环境下的项目中就可以了。
原创博文,转载请标明出处。