上班總是會遇到一些routine要執行的程式,那有一個好用的工具Crontab就派上用場啦~
編輯內容模式crontab -e
查看內容模式crontab -l
tips: 如果需要最高權限執行的話,記得使用sudo crontab -e
,查看要使用sudo crontab -l
* * * * * python3 test.py
MIN(分鐘) HOUR(小時) DOM(日) MON(月) DOW(星期幾) 指令(CMD)
# 設定要執行的檔案,前面/usr/bin/python3 選擇使用哪個版本,需要配合主機的路徑喔
0 2 * * * /usr/bin/python3 {filename}.py
,(逗號) 代表 分隔出多個時間點
-(減號) 代表 一段時間
*/數字 代表 每隔多少
情境一:每月1, 15, 30號 早上9點25分?25 9 1,15,30 * * /usr/bin/python3 {filename}.py
情境二:每隔2分鐘要執行一次?*/2 * * * * /usr/bin/python3 {filename}.py
情境三:遇到整點都要執行?00 0-24 * * * /usr/bin/python3 {filename}.py
情境四:週六執行?* * * * SAT /usr/bin/python3 {filename}.py
or* * * * 6 /usr/bin/python3 {filename}.py
ps. 星期是由(0-7所組成),週日可以用0或是7
想要刪除排程怎麼做?
crontab -r
那如果是用sudo 設定,知道怎麼做吧XD 忘記的話趕緊再往上看看如果沒有特別設定Log檔的話...
vim /var/mail/{name}
,或是直接在cmd打mail
也可以還有一些常見特殊的寫法?
//開機啟動 @reboot
@reboot /usr/bin/python3 {filename}.py
//每週啟動 @weekly = 0 0 * * 0
@weekly /usr/bin/python3 {filename}.py
//每天啟動 @daily = 0 0 * * *
@daily /usr/bin/python3 {filename}.py
想要執行寫在docker中的檔案,這邊的重點是要看在哪個container中,執行什麼樣的檔案
45 12 * * * docker exec {container_name} bash +x ./{filename}.sh
0 2 15 10 * docker exec {container_name} python {filename}.py
想在建立docker container時就直接建好排程
crontab -e
編輯,後者就跟上面介紹的流程一樣,因此這邊會示範前者~所以要重新建立一個新檔案,舉例,檔名叫cronjob,檔案中就放你想要執行的檔案~// 每週一到五,從9點到18點每個整點都執行routine.py,並把log 指向/log/crontab.log的路徑
* 9-18 * * 1-5 /usr/local/bin/python routine.py >> /log/crontab.log 2>&1
ps.想知道2>&1 是什麼意思?在Day3中有提到喔!趕快回去看
// 先裝cron
RUN apt-get install cron -y
// 複製cronjob 檔案到/etc/cron.d的路徑底下
COPY cronjob /etc/cron.d/cronjob
// 設定檔案的權限,並使用crontab 執行cronjob的檔案
RUN chmod 0644 /etc/cron.d/cronjob && crontab /etc/cron.d/cronjob
就大功告成啦~這時如果不確定該container到底有沒有裝好cron,或是想要在已經運行的容器中查看是否有支援crontab,就使用ps -aux
查看囉!