Linux:如何使用Cron安排常規作業

使用 Cron,你可以安排 Linux 上幾乎任何型別的作業,例如將特定目錄備份到外部驅動器。
當我們使用Linux時,你可以隨意建立一個強大、靈活且自動化的環境來滿足你的任何目的。
可用於自動化的工具之一便是Cron。使用 Cron,你可以在 Linux 上安排幾乎任何型別的作業。例如,你可以編寫一個 bash 指令碼來將特定目錄備份到外部驅動器。如果想讓該備份指令碼自動執行,就需要建立所謂的 cronjob,這樣它就會在你想要的時候準確執行。
幾乎每個Linux 發行版都預設安裝了 Cron ,因此您無需新增任何內容即可自動執行任務。
但是 Cron 如何使用呢?本文就來告訴你。
Cron 是如何工作的?
Cron 依賴於 crontab 檔案,這些檔案儲存在 /var/spool/cron 中。但是,重要的是要明白,您不要手動編輯這些檔案。為什麼?因為 Cron 有一個可用於編輯 crontab 檔案的工具。
這又引出了另一點。Linux 系統上的每個使用者都有自己的 crontab 檔案。任何使用者都可以建立 crontab 檔案,甚至可以使用以下命令檢視其當前的 cron 任務:
crontab -l
該命令的輸出將顯示包含您建立的任何自定義 cron 作業的 crontab 檔案的內容。
大多數人對 Cron 感到困惑的一件事是時間格式。Cron 有五個時間和日期條目,分別是:
  • 分鐘 (0-59)
  • 小時 (0-23)
  • 月份日期 (1-31)
  • 月份 (1-12)
星期幾(0-6,可以使用Sunday, Monday, Tuesday等,其中星期日可以用 0、7 或 Sunday 表示)
時間/日期格式配置如下:
M H D MO DW
其中 M 表示分鐘,H 表示小時,Day 表示月份中的天數,MO 表示月份,DW 表示星期幾。
例如,如果你建立了一個備份指令碼並且希望它每週日晚上 11:00 執行,則時間/日期格式為:
0 23 * * 0
在任何時候在 Cron 中看到星號,它就知道你希望它在該時間/日期條目的每個例項期間執行。在上面的示例中,月份的日期和月份條目都有星號,這意味著它們將在每個月的每一天和每個月執行。
如果你希望該作業每週六晚上 11:59 執行,則輸入內容為:
59 23 * * 6
或者你也可以這樣表述:
59 23 * * Saturday
新增 Cronjob
讓我們建立一個備份指令碼,然後建立一個 cron 作業,以便它每週日晚上 11 點執行。
我們的備份指令碼,內容如下所示:
#!/bin/bash# What you want to backup. backup_files="/home/$USER/Documents"# Where you want to backup to.dest="/backup"# Create an archive filename.day=$(date +%A)hostname=$(hostname -s)archive_file="$hostname-$day.tgz"# Backup the files using tar.tar czf $dest/$archive_file $backup_files
將該檔案另存為sat_backup.sh。還需要使用以下命令建立 /backup 目錄:
sudo mkdir /backup
更改許可權,以便你的使用者可以使用。以下命令進行寫入:
sudo chmod -R u+w /data
還需要確保目錄所有權正確,例如:
sudo chown -R $USER:$USER /data
儲存備份指令碼後,使用以下命令將其移動到 /usr/local/bin:
sudo mv sat_backup.sh /usr/local/bin
授予指令碼可執行許可權:
sudo chmod u+x /usr/local/bin/sat_backup.sh
繼續之前,請透過發出以下命令確保指令碼按預期執行:
sat_backup.sh
現在,讓我們建立 cronjob。為此,使用以下命令:
crontab -e
如果這是您第一次執行上述命令,系統將提示您選擇預設編輯器。我強烈建議選擇 Nano,因為它非常易於使用。
在檔案底部,新增以下內容:
0 23 * * 0 /usr/local/bin/sat_backup.sh > /dev/null 2>&1
需要做一點解釋。
我們已經知道 0 23 * * 0 是什麼意思,/usr/local/bin/sat_backup.sh 是建立的指令碼。但是 /dev/null 2>&1 呢?
這是一個關鍵元素,因為如果指令碼產生任何輸出(甚至是錯誤),它就會失敗,而不知道將錯誤傳送到哪裡。在上述情況下,/dev/null 2>&1 本質上是一個垃圾桶。如果沒有這個謎題,如果發現任何錯誤,cron 作業將無法執行。更具體地說:
  • 2 是標準錯誤的檔案描述符
  • > 用於重定向
  • & 是檔案描述符的符號
  • 1 是標準輸出的檔案描述符
這意味著所有標準錯誤都被重定向到標準輸出並被髮送到稱為 /dev/null 的黑洞。
使用 Ctrl+x 鍵盤快捷鍵儲存 cronjob。然後,你可以使用以下命令檢視 cronjob:
crontab -l
你應該會看到列出的新 cronjob,下週日晚上 11 點,該作業將自動執行,並且將在 /data 中找到一個新的備份檔案。
這就是 Linux cronjobs 的全部功能。作為 Linux 使用者和/或管理員,此工具對你來說一定很有用。
作者:聆聽音樂的魚

相關閱讀:


相關文章