使用 crontab 管理你的 Linux 計劃任務
在企業開發過程中,我們可能會使用到任務計劃程序去執行一些特定的事務。例如:定時重啓服務、定時備份數據庫、更新軟件包等。這些如果讓我們人工去進行操作的話,是無法保證的。如果我們使用系統中的任務計劃執行程序的話,可以自動化你的日常工作,避免手動重複執行相同的任務。
本文詳細的講述了在 Linux 中如何使用任務計劃執行程序 -
crontab
。
一、概述
crontab
是一個 Linux/[Unix 操作系統] 中用於設置定時任務的命令,其名稱來自於cron
(即定時任務調度程序)和tab
(即表格)兩個單詞的結合。
使用 crontab 命令,用戶可以創建、編輯、查看和刪除一系列定時任務,這些任務可以在指定的時間自動執行特定的命令或腳本。crontab 命令非常常見,通常被用於週期性地執行系統維護、備份、日誌清理等任務,或者用於運行自定義腳本以執行各種定時任務。
crontab 命令的語法相對簡單,可以通過運行
man crontab
或crontab --help
來查看幫助文檔。通常,用戶可以使用編輯器(如 vi 或 nano)來編輯 crontab 文件,以便設置定時任務。
二、安裝
在大多數 Linux 發行版中,crontab 已經預裝了。如果你使用的是 Ubuntu、Debian、CentOS、Red Hat 或其他類似的發行版,你可以通過以下步驟檢查 crontab 是否已經安裝:
1)、輸入以下命令:
crontab -l
如果未安裝,則會提示:-bash: crontab: command not found
2)、安裝命令:
- 在 Debian、Ubuntu、Linux Mint 等基於 Debian 的發行版中:
sudo apt-get install cron
- 在 CentOS、Red Hat 等基於 RPM 的發行版中:
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、兩種方式的區別
-
1)、crontab -e 是用戶級別的,而 /etc/crontab 是系統級別的。
-
2)、crontab -e 是每個用戶獨立的,而 /etc/crontab 是所有用戶共享的。這意味着,如果想要添加一個只對自己的定時任務,那麼應該使用 crontab -e;如果想要添加一個對所有用戶都有效的定時任務,那麼應該使用 / etc/crontab。
-
3)、crontab -e 可以通過指定用戶名來創建其他用戶的定時任務,而 /etc/crontab 只能由管理員來修改。
-
4)、crontab -e 是一個可編輯的文件,可以在其中添加、修改和刪除定時任務,而 /etc/crontab 是一個系統文件,需要管理員權限才能修改。
-
5)、在 crontab -e 中添加的任務將被保存在特定的用戶目錄下,而 /etc/crontab 中添加的任務將被保存在系統級別的文件中。
總的來說,如果只需要添加一個特定用戶的定時任務,那麼使用 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)、任務表達式實例
以下是一些時間間隔的示例:
-
每分鐘執行一次任務:
* * * * * command
-
每小時執行一次任務:
0 * * * * command
-
每天凌晨 0 點執行一次任務:
0 0 * * * command
-
每週執行一次任務:
0 0 * * 0 command
-
每月執行一次任務:
0 0 1 * * command
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