使用 crontab 管理你的 Linux 計劃任務

在企業開發過程中,我們可能會使用到任務計劃程序去執行一些特定的事務。例如:定時重啓服務、定時備份數據庫、更新軟件包等。這些如果讓我們人工去進行操作的話,是無法保證的。如果我們使用系統中的任務計劃執行程序的話,可以自動化你的日常工作,避免手動重複執行相同的任務。

本文詳細的講述了在 Linux 中如何使用任務計劃執行程序 -crontab

一、概述

crontab是一個 Linux/[Unix 操作系統] 中用於設置定時任務的命令,其名稱來自於cron(即定時任務調度程序)和tab(即表格)兩個單詞的結合。

使用 crontab 命令,用戶可以創建、編輯、查看和刪除一系列定時任務,這些任務可以在指定的時間自動執行特定的命令或腳本。crontab 命令非常常見,通常被用於週期性地執行系統維護、備份、日誌清理等任務,或者用於運行自定義腳本以執行各種定時任務。

crontab 命令的語法相對簡單,可以通過運行man crontabcrontab --help來查看幫助文檔。通常,用戶可以使用編輯器(如 vi 或 nano)來編輯 crontab 文件,以便設置定時任務。

二、安裝

在大多數 Linux 發行版中,crontab 已經預裝了。如果你使用的是 Ubuntu、Debian、CentOS、Red Hat 或其他類似的發行版,你可以通過以下步驟檢查 crontab 是否已經安裝:

1)、輸入以下命令:

crontab -l

如果未安裝,則會提示:-bash: crontab: command not found

2)、安裝命令:

sudo apt-get install cron
sudo yum install cronie

3)、安裝完成後,可以使用以下命令來檢查是否已經成功安裝:

crontab -l

默認安裝好後,是沒有定時任務的,會提示:no crontab for XXX

三、使用

crontab 可以自動運行命令或腳本,從而在指定的時間自動執行任務。在 Linux 系統中,有兩種方式添加定時任務

3.1、使用 crontab -e

1)、編輯 crontab 文件

crontab -e

執行命令後,會打開一個編輯界面,可以在裏面設置你的定時任務。

2)、設置定時任務

在 crontab 文件中,每一行代表一個定時任務。以下是一個例子:

0 0 * * * /usr/local/apps/sh/test.sh

這個任務將在每天的凌晨 0 點執行/usr/local/apps/sh/test.sh腳本。

這個表達式跟我們使用的 [cron] 表達式有略微區別,下面是0 0 * * *的解析:

.---------------- 分鐘 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
|  |  |  |  |    .---- 執行腳本
|  |  |  |  |    |
0  0  *  *  *  command

編輯完後,輸入:wq保存退出即可。就跟使用vi/vim編輯文件一樣的。

3)、刪除定時任務

需要使用crontab -e命令來編輯 crontab 文件,並刪除你想要刪除的那個定時任務的相應行。

如果使用的是crontab -r命令來刪除整個 crontab 文件,那麼將會刪除所有定時任務。因此,在刪除 crontab 文件之前,請確保是否所有定時任務都不需要了。

3.2、編輯 / etc/crontab

1)、編輯/etc/crontab文件:

vi /etc/crontab

2)、添加定時任務模板

0 0 * * * root /usr/local/apps/sh/test.sh

這裏需要注意的是,使用這種方式添加任務,需要指定一個用戶

3)、重啓 cron 服務

在修改/etc/crontab文件之後,您必須重啓 cron 服務,以便使更改生效。

systemctl restart cron

3.3、兩種方式的區別

總的來說,如果只需要添加一個特定用戶的定時任務,那麼使用 crontab -e 會更加方便;如果需要添加一個對所有用戶都有效的任務,或者你是系統管理員,則使用 / etc/crontab 會更加適合。

四、常用方式

1)、處理輸出和錯誤

當任務運行時,可能會生成輸出和錯誤消息。如果你需要將輸出和錯誤消息寫入文件,可以使用以下命令:

0 0 * * * /usr/local/apps/sh/test.sh > /var/log/test.log 2>&1

這個命令將所有輸出和錯誤寫入/var/log/backup.log文件中。請注意,2>&1將標準錯誤消息重定向到標準輸出,以便將它們寫入同一個文件中。

2)、任務表達式實例

以下是一些時間間隔的示例:

3)、一鍵添加任務

我們無論是使用crontab -e方式還是編輯/etc/crontab文件,都需要進入編輯界面進行添加。一下命令可以不用進入編輯界面,直接添加定時任務。

(crontab -l;echo "0 0 * * * /usr/local/apps/sh/test.sh") | crontab
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/rfo6n1wz4_NQbrW0rvS78A