2023年7月22日 星期六

[Linux]如何配置定期任務腳本,並將執行結果寄到外部郵箱? (上)

在Linux系統中,cron是用於定期執行任務的服務,其中crontab是配置定期任務的管理命令。關於定期執行任務,cron提供系統級和用戶級的配置服務,說明如下:

1.系統級:常用於備份系統數據或是清除系統緩存文件等週期性任務。系統級的最小運作週期是以小時為單位,可將任務腳本置於/etc/cron.hourly路徑中定時執行。另外,相較於用戶級,系統級可避免某個應執行任務被錯過。

2.用戶級:在Linux的不同用戶可依自行需求,設置週期性任務,如每天上午8:00啟動MySQL服務器並於晚上12:00關閉MySQL服務器,或者每三個小時執行一次Python程序。用戶級的最小運作週期是可達到分鐘為單位。

本文以用戶級的配置服務,配置定時執行的任務腳本(.sh),並將腳本結果輸出為文件(.txt),並寄到個人的外部郵箱,以完成自動化作業。其中,涉及到的服務和工具,除了上述提及的cron配置工作外,尚須基礎了解shell script撰寫、執行腳本的權限設定和mailx的配置工作。每個主題依序說明如下。


a. cron配置工作

crontab命令用於配置定期任務,例如 crontab -l 條列已配置的定期任務; crontab -e 編輯定期任務(即設定多久執行一次任務) ; 而管理者可用crontab -u <username> 去管理所有用戶已設置的定期任務; crontab -r 刪除已配置的定期任務。


在說明crontab -e是如何編輯定期任務之前,須先了解其定義週期的語法。可藉由vim /etc/crontab中的範例了解週期定義的語法。舉例如下:

0 2 * * * command  => 每天2:00執行一次指令

0 2 10 * * command  => 每月10號的2:00執行一次指令

0 2 * * 5 command  => 每周五2:00執行一次指令

*/5 * * * * command  => 每隔五分鐘執行一次指令


本文範例是以每兩分鐘執行一次test.sh腳本來進行,如下圖,同時當配置和執行時,可利用crontab -l來查看是否已設置好,或由 /var/spool/cron路徑中查閱是否已有任務。


b. 定義腳本

利用shell script來撰寫執行腳本,腳本內容大致為,列印出當下執行的日期資訊和6~10的數字,同時資料存成data.txt,並將該data.txt分別寄到gmail和139的郵箱,如下兩圖。



本文最後提供一個好用的腳本線上工具,可作為腳本的初步測試用,相信很多程序員都用過。

下篇文章再接續了解 mailx的用法,以及該過程可能會遇到的坑與解法。

沒有留言:

張貼留言