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環境下的項目中就可以了。
原創博文,轉載請標明出處。