個人需要備份博客數據,決定使用 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
過程的總結,歡迎溝通交流。
歡迎訪問的個人博客:掘墓人的小鏟子