1. 程式人生 > >在alpine linux構建的docker中使用crontab執行定時任務

在alpine linux構建的docker中使用crontab執行定時任務

最近使用使用docker部署程式時,發現基於alpine的docker裡面crond命令都不能正確執行,同事建議使用兩個docker後link起來讀取,個人感覺還是比較佔用資源,經過一番google,發現alpine這個發行版還是和centos,rethat等有一些不同,整理一下部署心得。

1. 首先發現docker時間和宿主機時間不一致,需要調整成一致crontab任務提高可讀性,其中載入tzdata包,注意載入完不要刪除,注意紅色字型,進入docker後輸入date看看時間一致不一致,Docker File命令:

RUN apk add --update libc-dev g++ python-dev openldap-dev py-pyldaptzdata

\

    && ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \

2. alpine的crontab執行機制和其他linux有點差異,在docker中,似乎只能執行root的crontab命令,其路徑在/var/spool/cron/crontabs/root中,並不是掃描cron.d/資料夾下面的所有檔案,將自己的crontab指令碼先copy到docker,再cat到docker的root指令碼後面才可以執行,或者直接寫指令碼到Docker File也可以,如下:

COPY scripts/cron.d/your_job_dir /etc/cron.d/

RUN cat /etc/cron.d/your_job_file>>/var/spool/cron/crontabs/root \
    && echo '* * * * * /bin/echo 'helloword' >> /var/log/cron'>>/var/spool/cron/crontabs/root

3. 執行時直接加上後臺的crond即可,我的執行程式是python server.py,在前面加上crond即可,預設後臺執行。

CMD crond && python server.py