CodeGym /Adesua ahorow /Docker SELF /使用 cron 和 at 自動化任務

使用 cron 和 at 自動化任務

Docker SELF
等級 3 , 課堂 5
開放

使用 cronat 進行任務自動化

1. 為什麼需要自動化?

自動化任務是每個 Linux 系統管理員的核心技能。想像一下,如果沒有自動化,每天早上都必須打開終端機,手動輸入同樣的命令來備份數據、壓縮它們、上傳到伺服器並清理舊的日誌檔案。一週下來,這樣的重複工作可能會讓你萌生換工作的念頭… 不過不用擔心,我們在這裡是為了教你如何讓電腦成為你的忠實助手。

今天的課程是關於時間和任務的魔法。我們將學習如何使用強大的工具 cronat 在作業系統層面自動化這些流程。這些工具能幫你節省大量時間,有時候還能保住你的理智。

自動化是處理任何重複性任務的救星。例如,你有個腳本會為你的老闆生成報告,且報告每天早上 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"

實踐:執行一個簡單的任務

  1. 打開你的 crontab 進行編輯:

    crontab -e
    
  2. 加入一行:

    */5 * * * * echo "Hello, world! The time is $(date)" >> ~/cron_test.log
    

    這個任務將每 5 分鐘將當前時間的文字加入到檔案 cron_test.log 中。保存並退出。

  3. 檢查任務是否啟動:

    tail -f ~/cron_test.log
    

    5 分鐘後,你應該能看到檔案中的更新記錄。

檢視計劃的任務

檢查目前的任務:

crontab -l

刪除任務

刪除 crontab 中的所有任務:

crontab -r

cron 的實際應用例子

文件歸檔

假設你希望每天晚上 3 點歸檔 /var/logs 目錄中的文件:

  1. 編寫腳本:

    #!/bin/bash
    tar -czf /backup/logs_$(date +\%Y-\%m-\%d).tar.gz /var/logs
  2. crontab 中設定計劃:

    0 3 * * * /path/to/script.sh
    

搞定!你再也不會忘記備份了。

系統負載通知

例如,你希望在 CPU 負載超過 80% 時收到通知:

  1. 編寫腳本:

    #!/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
  2. 設置計劃時間:

    */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 發送通知

  1. 創建一個 2 分鐘後的通知任務:

    echo "notify-send '時間到了!'" | at now + 2 minutes
    
  2. 檢查任務列表:

    atq
    
  3. 等待 2 分鐘後彈出通知窗口。


4. 使用 cronat 的典型錯誤

最常見的問題之一是指定了錯誤的腳本或命令路徑。記住,cron 在一個最小的環境中執行,因此可能不知道你的變數,如 PATH。最好的方法是使用絕對路徑。

例如,如果你想執行一個 Python 腳本:

*/30 * * * * /usr/bin/python3 /path/to/script.py

另外,確保腳本具有執行權限:

chmod +x /path/to/script.sh

這些知識可以用在哪裡?

幾乎每一個與 IT 相關的職業都需要自動化技能。你可以將這些知識用於:

  • 自動化日常系統任務。
  • 設置定期備份。
  • 監控伺服器狀態。
  • 面試時,經常會被問到 cron 和自動化相關的問題。

如果你從事 DevOps、系統管理或只是想提高效率,理解 cronat 能讓你脫穎而出,也能節省大量時間。

現在你知道如何讓 Linux 替你工作了。下次當有人抱怨日常瑣事時,只需微笑,因為你就是自動化大師!

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION