docker下創建crontab定時任務失敗


創建過程

基礎鏡像采用的centos7.2,需要安裝一下crontab,在dockerfile中加以下語句就可以了:

# crontab jobs
RUN yum -y install crontabs
ADD ./run/nlp-cron /etc/cron.d/nlp-cron
RUN chmod 0644 /etc/cron.d/nlp-cron
RUN crontab /etc/cron.d/nlp-cron

其中nlp-cron是定時任務的配置,內容是下面這樣的:

* * * * *  sh test.sh >/dev/null 2>&1

后來啟動了鏡像,發現定時任務並不能正常啟動,於是開啟了漫長的排錯過程。

排錯1

首先進入docker的容器,用crontab -l看了一下,任務實際上是存在的,可以證明是任務沒有啟動/執行成功而已。

同時在容器中,執行了一下想要做的操作,發現沒有任何問題,說明代碼沒有問題。

排錯2

創建鏡像的過程是參考這里做的,按理說不缺什么步驟,於是又按照他的過程重新弄了一下,發現系統命令可以執行。

此時又問了一下同事,說最好用全路徑。我本身執行的是python命令,於是whereis python找了一下全路徑,改了之后,發現還是沒有執行成功。

於是在py文件里加了各種print,發現一個問題寫文件的操作不能執行……經同事提醒,試了一下全路徑,居然改好了。

排錯3

過了2天,功能完善后,想打包再試一下,發現又不行了……這次日志顯示的是缺一個環境變量,於是找了半天辦法。最終,在bash_profile中添加了環境變量,才解決了這個問題。

export LD_LIBRARY_PATH=/usr/lib/xxx:$LD_LIBRARY_PATH

export PATH

排錯4

在排錯期間,網上很多人說到是權限驗證的問題。要改下面這個地方,/etc/pam.d/crond:

#
# The PAM configuration file for the cron daemon
#
#
# No PAM authentication called, auth modules not needed
account    required   pam_access.so
account    include    password-auth
session    sufficient   pam_loginuid.so
session    include    password-auth
auth       include    password-auth

排錯5

打包之后,起了容器,可能還會遇到不執行的問題,此時可以嘗試重啟crontab。試了一下在dockerfile中加 RUN crond restart,發現不管用。

此時可以嘗試起了容器之后,執行一個下面的命令:

docker exec -it container_id crond restart


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM