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

 

 

原創博文,轉載請標明出處。

 

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