最近項目服務要求轉docker,環境都搭好了,服務有些機制加入了crontab任務,但docker容器起來后,服務起來時將crontab任務寫入cron中,但就是不執行,幾番排查發現,容器的cron服務其實沒有起來,或者說默認處於[-]
狀態,需要顯示將其start
。
下面講講我在項目中的解決方案。
linux系統中的cron服務默認是開機啟動,但容器並不是,需要手動start,比如我又有需求讓服務起來時就把cron的定時任務寫入cron中,而且我希望cron任務如期進行,下面是具體設置。
在Dockerfile中配置運行腳本
比如我的配置如下:
# dockerfile for my service
FROM myimage:tag
ENV python 3.7.9
WORKDIR /opt/mydir
ADD ./ /opt/mydir # Dockerfile放在項目目錄中
ENTRYPOINT ["sh", "myservice_run.sh"] # 容器起來時運行服務,另外也可以在里面添加cron啟動命令
運行腳本
如上文說的myservice_run.sh
#!/bin/bash
# start cron
service cron start
# start my service
sh myservice.sh # 如果后台運行,應該有前台進程或者設置 sleep 或者 tail -f 這些
在構建新鏡像后,啟動容器后,進入容器中,通過service --status-all
可以查看[+] cron
,另外再確認下cron任務 crontab -l
。
如果沒有基礎鏡像沒有cron,就install吧。