iT邦幫忙

2022 iThome 鐵人賽

DAY 4
1
Software Development

剛入職軟體工程師會需要知道的常見工具篇系列 第 4

[Day4] Linux 排程工具 Crontab,也有Docker 的範例喔

  • 分享至 

  • xImage
  •  

上班總是會遇到一些routine要執行的程式,那有一個好用的工具Crontab就派上用場啦~

普通情境

  • 編輯內容模式crontab -e

  • 查看內容模式crontab -l

tips: 如果需要最高權限執行的話,記得使用sudo crontab -e,查看要使用sudo crontab -l

  • 那要怎麼把程式執行呢? 先來介紹不可不知道構成排程的元素,五個時間配上指令啦
*        *           *        *        *            python3 test.py
MIN(分鐘) HOUR(小時) DOM(日) MON(月) DOW(星期幾)  指令(CMD)
  • 範例,是每天早上2點會執行此程式
# 設定要執行的檔案,前面/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 情境

  • 想要執行寫在docker中的檔案,這邊的重點是要看在哪個container中,執行什麼樣的檔案

    • 每天12:45執行sh 檔
      45 12 * * * docker exec {container_name} bash +x ./{filename}.sh
    • 每年的10/15凌晨兩點執行py檔
      0 2 15 10 * docker exec {container_name} python {filename}.py
  • 想在建立docker container時就直接建好排程

    • 這時可以先建好crontab 的編輯檔案或是建好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中有提到喔!趕快回去看

    • 建立好cronjob檔案,就要把內容加入container中,因此打開Dockerfile
    // 先裝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查看囉!

資料參考


上一篇
[Day3] Linux 偷懶小工具 nohup
下一篇
[Day5] 簡單搞懂Restful API設計風格(上)
系列文
剛入職軟體工程師會需要知道的常見工具篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言