Linux之定時任務排程
阿新 • • 發佈:2018-11-01
一、crond 任務排程
crontab 進行 定時任務的設定
1、 概述
任務排程:是指系統在某個時間執行的特定的命令或程式。
任務排程分類:1.系統工作:有些重要的工作必須周而復始地執行。如病毒掃描等
2、 基本語法
crontab [選項]
常用選項
選項 | 說明 |
---|---|
-e | 編輯crontab定時任務 |
-l | 查詢crontab任務 |
-r | 刪除當前使用者所有的crontab任務 |
二、快速入門
1、 設定任務排程檔案:/etc/crontab
2、設定個人任務排程:執行crontab –e命令
。
3、接著輸入任務到排程檔案
如:*/1 * * * * ls –l /etc/ > /tmp/to.txt
意思說每小時的每分鐘執行ls –l /etc/ > /tmp/to.txt命令
4、引數細節說明
- 5個佔位符的說明
專案 | 含義 | 範圍 |
---|---|---|
第一個“*” | 一小時當中的第幾分鐘 | 0-59 |
第二個“*” | 一天當中的第幾小時 | 0-23 |
第三個“*” | 一個月當中的第幾天 | 1-31 |
第四個“*” | 一年當中的第幾月 | 1-12 |
第五個“*” | 一週當中的星期幾 | 0-7(0和7都代表星期日) |
- 特殊符號的說明
特殊符號 | 含義 |
---|---|
* | 代表任何時間。比如第一個“*”就代表一小時中每分鐘都執行一次的意思。 |
, | 代表不連續的時間。比如“0 8,12,16 * * * 命令”,就代表在每天的8點0分,12點0分,16點0分都執行一次命令 |
- | 代表連續的時間範圍。比如“0 5 * * 1-6命令”,代表在週一到週六的凌晨5點0分執行命令 |
*/n | 代表每隔多久執行一次。比如“/10 * * * 命令”,代表每隔10分鐘就執行一遍命令 |
- 特定時間執行任務案例
時間 | 含義 |
---|---|
45 22 * * * 命令 | 在22點45分執行命令 |
0 17 * * 1 命令 | 每週1 的17點0分執行命令 |
0 5 1,15 * * 命令 | 每月1號和15號的凌晨5點0分執行命令 |
40 4 * * 1-5 命令 | 每週一到週五的凌晨4點40分執行命令 |
/10 4 * * 命令 | 每天的凌晨4點,每隔10分鐘執行一次命令 |
0 0 1,15 * 1 命令 | 每月1號和15號,每週1的0點0分都會執行命令。 |
注意:星期幾和幾號最好不要同時出現,因為他們定義的都是天。非常容易讓管理員混亂。
三、crond 相關指令:
1) conrtab –r:終止任務排程。
2) crontab –l:列出當前有那些任務排程
3) service crond restart [重啟任務排程]
應用例項
案例1:每隔1分鐘,就將當前的日期資訊,追加到 /tmp/mydate 檔案中
案例2:每隔1分鐘, 將當前日期和日曆都追加到 /home/mycal 檔案中
/home/task.sh
特別說明:需要給 task.sh 一個執行的許可權,否則不能執行。
chmod 755 /home/task.sh
四、shell指令碼Mysql資料庫自動備份程式碼
vi /usr/sbin/mysql_dy_backup.sh
#!/bin/bash
#備份路徑
BACKUP=/data/backup/sql/dy
#當前時間
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo "===備份開始==="
echo "備份檔案存放於${BACKUP}/$DATETIME.tar.gz"
#資料庫地址
HOST=localhost
#資料庫使用者名稱
DB_USER=root
#資料庫密碼
DB_PW=Ces123456
#建立備份目錄
[ ! -d "${BACKUP}/$DATETIME" ] && mkdir -p "${BACKUP}/$DATETIME"
#後臺系統資料庫
DATABASE=dy_backgroundms
mysqldump -u${DB_USER} -p${DB_PW} --host=$HOST -q -R --databases $DATABASE | gzip > ${BACKUP}/$DATETIME/$DATABASE.sql.gz
#投入品監管資料庫
DATABASE=dy_firip
mysqldump -u${DB_USER} -p${DB_PW} --host=$HOST -q -R --databases $DATABASE | gzip > ${BACKUP}/$DATETIME/$DATABASE.sql.gz
#壓縮成tar.gz包
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#刪除備份目錄
rm -rf ${BACKUP}/$DATETIME
#刪除10天前備份的資料
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "===備份成功==="
注:find:linux的查詢命令,使用者查詢指定條件的檔案
-mtime:標準語句寫法
+10:查詢10天前的檔案,這裡用數字代表天數,+30表示查詢30天前的檔案
"*.*":希望查詢的資料型別,"*.jpg"表示查詢副檔名為jpg的所有檔案,"*"表示查詢所有檔案,這個可以靈活運用,舉一反三
-exec:固定寫法
rm -rf:強制刪除檔案,包括目錄
{} \; :固定寫法,一對大括號+空格+\
2、更改備份指令碼許可權
chmod u+x /usr/sbin/mysql_dy_backup.sh
3、設定定時執行指令碼任務
crontab -e
#每天17:30執行
30 17 * * * /usr/sbin/mysql_dy_backup.sh