天天看點

CentOS 7 定時任務 crontab 入門

個人需要備份部落格資料,決定使用 CentOS 的定時任務,正好将設定定時任務的過程寫一下。

本文是基于

CentOS 7

,其他

Linux

發行版可能略有不同。

crontab 适用場景

crontab 用于送出和管理執行周期性的任務。

例如你需要在每天淩晨 1 點重新開機伺服器,那麼 crontab 可以很友善的幫你執行重新開機操作。

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

crontab 使用

1、安裝 crontab

一般 CentOS 會預設安裝了

crontab

,執行下面指令,檢視是否安裝:

rpm -qa | grep crontab
           

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

crontabs-1.11-6.20121102git.el7.noarch
           

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

yum install -y crontabs
           

2、crontab 常用指令

檢視

crontab

運作狀态:

systemctl status crond
           

如果顯示結果為

Active: active (running)

則表示運作中,

Active: inactive (dead)

表示未運作。

如果

crontab

未運作,可以通過下面指令設定開機自啟和啟動。

設定

crontab

開機自啟:

systemctl enable crond
           

啟動

crontab

systemctl start crond
           

檢視目前使用者的定時任務:

crontab -l
           

3、設定定時任務

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

首先,在

root

目錄下建立一個

test

檔案夾:

mkdir test
           

然後在

root

下建立一個腳本

test.sh

vim /root/test.sh
           

i

進入編輯狀态,粘貼下面内容:

#! /bin/bash
tar -zcvf test.tar /root/test
           

Esc

鍵,再輸入

:wq

儲存檔案。

執行下面指令即可編輯目前使用者的定時任務:

crontab -e
           

假如我想在每天 19:00 的時候壓縮

test

檔案夾,那麼可以按下

i

進入編輯狀态,粘貼下面内容:

0 19 * * * bash /root/test.sh
           

Esc

鍵,再輸入

:wq

儲存,當然你也可以修改為臨近的時間,測試是否生效。

通過

crontab -l

可檢視到已儲存的定時任務:

0 19 * * * bash /root/test.sh
           

定時任務參數說明:

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

參數中的添加了

bash

字段,是因為我在實際使用的過程中,發現定時任務不執行,搜尋之後發現,需要在執行的指令前添加

bash

或者

/etc/profile;/bin/sh

到達指定時間之後,檢視

/root

目錄下是否已經有了

test.tar

壓縮包,如果有說明定時任務執行成功;如果沒有,則說明

crontab

沒有執行。

4、crontab 不執行的原因

  • 檢查

    crontab

    服務是否正常
  • 檢查腳本路徑是否絕對路徑
  • 檢查腳本路徑前是否添加了

    bash

    /etc/profile;/bin/sh

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

實際使用

我自己使用

crontab

是為了備份部落格的資料到

gitee

,簡單說下步驟。

  • 将資料所在的目錄初始化并推送到遠端倉庫
  • 建立自動推送更新的腳本

    git.sh

#! /bin/bash
t=$(date +%Y%m%d%H%M%S)
cd /root/halo
git pull
git add .
git commit -m $t
git push
           
  • crontab -e

    設定定時任務
0 23 * * * bash /root/halo/git.sh
           

之是以備份到

gitee

而不是

GitHub

,當然是因為

gitee

通路穩定且快,這裡需要注意,要通過

SSH

方式推送。

以上就是我在使用

crontab

過程的總結,歡迎溝通交流。

歡迎通路的個人部落格:掘墓人的小鏟子

繼續閱讀