1. 程式人生 > >Linux之定時任務排程

Linux之定時任務排程

一、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