使用 cron
和 at
進行任務自動化
1. 為什麼需要自動化?
自動化任務是每個 Linux 系統管理員的核心技能。想像一下,如果沒有自動化,每天早上都必須打開終端機,手動輸入同樣的命令來備份數據、壓縮它們、上傳到伺服器並清理舊的日誌檔案。一週下來,這樣的重複工作可能會讓你萌生換工作的念頭… 不過不用擔心,我們在這裡是為了教你如何讓電腦成為你的忠實助手。
今天的課程是關於時間和任務的魔法。我們將學習如何使用強大的工具 cron
和 at
在作業系統層面自動化這些流程。這些工具能幫你節省大量時間,有時候還能保住你的理智。
自動化是處理任何重複性任務的救星。例如,你有個腳本會為你的老闆生成報告,且報告每天早上 8:00 都需要完成。與其早起手動執行腳本(還冒著拿著咖啡度過早晨忘記執行的風險),你可以使用 cron
自動執行這個任務。
cron
— 適合定期重複執行的常規任務。
at
— 適合一次性執行的特定時間任務。
2. 使用 cron
cron
是什麼?
cron
是一個守護進程(系統進程),它在背景中運行並執行在特定時間編程好的任務。這些任務的計劃存儲在所謂的 crontab
中 —— 它是一種文字檔案。系統中的每個使用者都可以擁有自己的 crontab
。
你的第一個 cron
任務
下面是一個用於操作 cron
的基本命令:
crontab -e
這個命令會打開目前使用者的 crontab
以供編輯。你可以加入任務並指定計劃格式。
計劃的語法
crontab
中的一行包括六個欄位:
* * * * * COMMAND
- - - - -
| | | | └─ 星期幾 (0–7,其中 0 和 7 是星期日)
| | | └── 月份 (1–12)
| | └─── 日期 (1–31)
| └──── 小時 (0–23)
└───── 分鐘 (0–59)
範例:每天中午執行 echo "Hello, Linux"
:
0 12 * * * echo "Hello, Linux"
實踐:執行一個簡單的任務
打開你的
crontab
進行編輯:crontab -e
加入一行:
*/5 * * * * echo "Hello, world! The time is $(date)" >> ~/cron_test.log
這個任務將每 5 分鐘將當前時間的文字加入到檔案
cron_test.log
中。保存並退出。檢查任務是否啟動:
tail -f ~/cron_test.log
5 分鐘後,你應該能看到檔案中的更新記錄。
檢視計劃的任務
檢查目前的任務:
crontab -l
刪除任務
刪除 crontab
中的所有任務:
crontab -r
cron
的實際應用例子
文件歸檔
假設你希望每天晚上 3 點歸檔 /var/logs
目錄中的文件:
編寫腳本:
#!/bin/bash tar -czf /backup/logs_$(date +\%Y-\%m-\%d).tar.gz /var/logs
在
crontab
中設定計劃:0 3 * * * /path/to/script.sh
搞定!你再也不會忘記備份了。
系統負載通知
例如,你希望在 CPU 負載超過 80% 時收到通知:
編寫腳本:
#!/bin/bash LOAD=$(uptime | awk '{print $10}' | sed 's/,//') if (( $(echo "$LOAD > 0.80" | bc -l) )); then echo "High CPU load: $LOAD" | mail -s "CPU Alert" you@example.com fi
設置計劃時間:
*/10 * * * * /path/to/cpu_check.sh
3. 使用 at
at
允許在指定時間執行一次性任務。與 cron
不同,at
的任務不會重複執行。這對於像「明天早上 9 點完成這件事」這樣的任務非常方便。
簡單的 at
任務
以下是一個如何計劃任務的例子:
echo "echo '你好,Linux!'" | at now + 1 minute
此命令將在一分鐘後執行 echo '你好,Linux!'
。
你也可以指定準確的時間和日期:
echo "echo '備份完成!'" | at 10:30 AM tomorrow
管理 at
任務
添加任務後,你可以查看列表:
atq
輸出例子:
1 Tue Oct 31 10:30:00 2023 a user
2 Tue Oct 31 11:00:00 2023 a user
刪除任務:
atrm <job_id>
實踐:使用 at
發送通知
創建一個 2 分鐘後的通知任務:
echo "notify-send '時間到了!'" | at now + 2 minutes
檢查任務列表:
atq
等待 2 分鐘後彈出通知窗口。
4. 使用 cron
和 at
的典型錯誤
最常見的問題之一是指定了錯誤的腳本或命令路徑。記住,cron
在一個最小的環境中執行,因此可能不知道你的變數,如 PATH
。最好的方法是使用絕對路徑。
例如,如果你想執行一個 Python 腳本:
*/30 * * * * /usr/bin/python3 /path/to/script.py
另外,確保腳本具有執行權限:
chmod +x /path/to/script.sh
這些知識可以用在哪裡?
幾乎每一個與 IT 相關的職業都需要自動化技能。你可以將這些知識用於:
- 自動化日常系統任務。
- 設置定期備份。
- 監控伺服器狀態。
- 面試時,經常會被問到
cron
和自動化相關的問題。
如果你從事 DevOps、系統管理或只是想提高效率,理解 cron
和 at
能讓你脫穎而出,也能節省大量時間。
現在你知道如何讓 Linux 替你工作了。下次當有人抱怨日常瑣事時,只需微笑,因為你就是自動化大師!
GO TO FULL VERSION