《Linux – Ubuntu 5分鐘搞懂crontab 工作排程 – 學習筆記》

Telegram share !

相信很多Linux的系統維運人員與開發人員,日常需要使用定期的排程,如開發網站程式的時候,從營運方面的定期檔案備份、相關服務的重啟,到定期發送系統EDM以及在離峰時間,發送會員到期通知之類的程式都可以透過crontab來為你觸發執行,本筆記我會將我所知道的知識分享給大家參考,我也順便紀錄下來當作備忘錄,也希望藉由此次分享讓初學者能更快掌握相關語法。

測試資料

1.可以先在/var/www/建立一個 test資料夾,再到/var/www/test/建立backup資料夾

2.建立排程的共用資料夾/opt/task/

3.檔案名稱可以用testdata.txt,使用vim testdata.txt建立並將以下資料貼入即可開始測試

crontab 測試文字

編寫測試工作排程

1.先到命令提示字元,下指令編輯crontab

root@ip-192-168-0-99:/var/www/test# vim /etc/crontab
# 每日06:01執行此段備份排程 ##
1  6  *  *  *  root /opt/task/backup_test.sh

2.backup_test.sh內容,功能為備份/var/www/test/下的所有檔案

#!/bin/bash
  
# 定義原始檔案和目標備份目錄
source_dir="/var/www/test/"
backup_dir="/var/www/test/backup/"

# 獲取當前日期並格式化
current_date=$(date +%Y%m%d_%H%M)

# 壓縮並歸檔
tar_file="${backup_dir}${current_date}_backupfile.tar.gz"
tar zcvf "$tar_file" "$source_dir"

echo "Backup completed: ${tar_file}"

crontab基本用法

# Example of job definition:
# .---------------- 分minute (0 - 59)
# |  .------------- 時hour (0 - 23)
# |  |  .---------- 天day of month (1 - 31)
# |  |  |  .------- 月month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- 星期幾day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  1  6  *  *  *      root /path/to/command_or_script > /dev/null

crontab應用場景

  • 資料備份:你可以設定一個script每晚自動備份你的資料到另一個磁碟或雲端儲存空間。
  • 系統更新:自動在每週一固定時間檢查和安裝系統更新。
  • 日誌分析:每天執行script來分析網站的訪問日誌並發送報告。
  • 發送通知:如果你運行一個線上商店,你可以設定一個任務每小時檢查庫存量,如果某個項目庫存不足,則發送電子郵件通知。
  • 資料同步:定期將本地資料同步到遠端伺服器或從遠端伺服器同步到本地伺服器。

crontab常見範例

1.每小時執行排程任務一次

0 * * * * root /path/to/command_or_script
#上述Cron運算式表示排程任務將在每個小時的第0分鐘(整點)執行

2.每天定時執行排程任務一次

0 3 * * * root /path/to/command_or_script
#上述Cron運算式表示排程任務將在每天的淩晨2點(03:00 AM)執行

3.每周固定時間執行排程任務一次

0 3 * * 5 root /path/to/command_or_script
#上述Cron運算式表示排程任務將在每週的星期五淩晨3點(03:00 AM)執行。※請注意:星期的數字是0到7,其中0和7都表示周日。

4.每月固定時間執行排程任務一次

0 5 1 * * root /path/to/command_or_script
#上述Cron運算式表示排程任務將在每個月的第1天的淩晨4點(05:00 AM)執行。

5.每N分鐘執行排程任務一次(如5分鐘)

*/5 * * * * root /path/to/command_or_script
#上述Cron運算式表示排程任務將在每隔5分鐘執行一次任務(使用*/5來表示)

6.每天執行多次排程任務

0 9,16,19 * * * root /path/to/command_or_script
#上述Cron運算式表示排程任務將在每天的9點(09:00 AM)、16點(04:00 PM)和19點(07:00 PM)各執行一次。

crontab特殊用法

1.系統開機時執行

@reboot root /path/to/command_or_script

2.系統開機時等待幾秒執行

@reboot sleep 60; root /path/to/command_or_script

Reference