個人需要備份部落格資料,決定使用 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
過程的總結,歡迎溝通交流。
歡迎通路的個人部落格:掘墓人的小鏟子