CentOS 7 定時任務 crontab 入門

個人需要備份博客數據,決定使用 CentOS 的定時任務,正好將設置定時任務的過程寫一下。

本文是基於 CentOS 7,其他 Linux 發行版可能略有不同。

crontab 適用場景

crontab 用於提交和管理執行週期性的任務。

例如你需要在每天凌晨 1 點重啟服務器,那麼 crontab 可以很方便的幫你執行重啟操作。

再例如,你要每隔 5 分鐘檢查某個服務是否在運行,也可以使用 crontab 來實現。

crontab 使用

1、安裝 crontab

一般 CentOS 會默認安裝了 crontab,執行下面命令,查看是否安裝:

<code>rpm -qa | grep crontab/<code>

如果查詢結果類似於下面,說明已安裝:

<code>crontabs-1.11-6.20121102git.el7.noarch/<code>

如果結果為空,說明沒有安裝,執行下面命令進行安裝即可:

<code>yum install -y crontabs/<code>

2、crontab 常用命令

查看 crontab 運行狀態:

<code>systemctl status crond/<code>

如果顯示結果為 Active: active (running) 則表示運行中,Active: inactive (dead) 表示未運行。

如果 crontab 未運行,可以通過下面命令設置開機自啟和啟動。

設置 crontab 開機自啟:

<code>systemctl enable crond/<code>

啟動 crontab:

<code>systemctl start crond/<code>

查看當前用戶的定時任務:

<code>crontab -l/<code>

3、設置定時任務

這裡我們以一個「每天晚上定時將指定文件夾打包成壓縮包」的任務為例,說明設置定時任務的步驟。

首先,在 root 目錄下創建一個 test 文件夾:

<code>mkdir test/<code>

然後在 root 下創建一個腳本 test.sh:

<code>vim /root/test.sh/<code>

按 i 進入編輯狀態,粘貼下面內容:

<code>#! /bin/bash
tar -zcvf test.tar /root/test/<code>

按 Esc 鍵,再輸入 :wq 保存文件。

執行下面命令即可編輯當前用戶的定時任務:

<code>crontab -e/<code>

假如我想在每天 19:00 的時候壓縮 test 文件夾,那麼可以按下 i 進入編輯狀態,粘貼下面內容:

<code>0 19 * * * bash /root/test.sh/<code>

按 Esc 鍵,再輸入 :wq 保存,當然你也可以修改為臨近的時間,測試是否生效。

通過 crontab -l 可查看到已保存的定時任務:

<code>0 19 * * * bash /root/test.sh/<code>

定時任務參數說明:

<code># .---------------- 分鐘,取值範圍為 0-59
# | .------------- 小時,取值範圍為 0-23
# | | .---------- 日,取值範圍為 1-31
# | | | .------- 月,取值範圍為 1-12
# | | | | .---- 星期,取值範圍為 0-7,0 和 7 都表示星期日
# | | | | | .-- 要執行的命令
# | | | | | |
0 19 * * * bash /root/test.sh/<code>

參數中的添加了 bash 字段,是因為我在實際使用的過程中,發現定時任務不執行,搜索之後發現,需要在執行的命令前添加 bash 或者 /etc/profile;/bin/sh。

到達指定時間之後,查看 /root 目錄下是否已經有了 test.tar 壓縮包,如果有說明定時任務執行成功;如果沒有,則說明 crontab 沒有執行。

4、crontab 不執行的原因

  • 檢查 crontab 服務是否正常
  • 檢查腳本路徑是否絕對路徑
  • 檢查腳本路徑前是否添加了 bash 或 /etc/profile;/bin/sh

如果以上都沒問題,那就要通過日誌查找問題所在了。

實際使用

我自己使用 crontab 是為了備份博客的數據到 gitee,簡單說下步驟。

  • 將數據所在的目錄初始化並推送到遠程倉庫
  • 新建自動推送更新的腳本 git.sh
<code>#! /bin/bash
t=$(date +%Y%m%d%H%M%S)
cd /root/halo
git pull
git add .
git commit -m $t
git push/<code>
  • crontab -e 設置定時任務
<code>0 23 * * * bash /root/halo/git.sh/<code>

之所以備份到 gitee 而不是 GitHub,當然是因為 gitee 訪問穩定且快,這裡需要注意,要通過 SSH 方式推送。

以上就是我在使用 crontab 過程的總結,歡迎溝通交流。


分享到:


相關文章: