linux的定時器-備份mysql
之所以發(fā)布這篇文章,在重新審查已發(fā)布的博文時發(fā)現(xiàn)以前發(fā)布的【mysql的安全措施了解下】的定時器中描述不全,存在數(shù)據(jù)備份失敗問題,這里補(bǔ)充下解決方案,帶來的失誤,深感抱歉,具體現(xiàn)象表現(xiàn)為:
shell腳本手動執(zhí)行沒問題,crontab定時執(zhí)行失敗
問題描述:
Shell腳本手動執(zhí)行可以正常運(yùn)行,并得到正確結(jié)果;使用Crontab定時調(diào)度的時候,Shell腳本執(zhí)行出來的結(jié)果數(shù)據(jù)量為0。
原因:
Linux中用crontab執(zhí)行定時任務(wù)不會缺省的從用戶profile文件中讀取環(huán)境變量參數(shù),所以經(jīng)常導(dǎo)致在手工執(zhí)行某個腳本時是成功的,但是到crontab中試圖讓它定期執(zhí)行時就是會出錯。這是因?yàn)橛脩舻卿汱inux操作系統(tǒng)的時候,”/etc/profile”, “~/.bash_profile”等配置文件會被自動執(zhí)行,而crontab定時調(diào)度的時候可能不會執(zhí)行配置文件。
解決方案:
Shell腳本缺省的 #!/bin/sh 開頭換行后的第一行添加,可以參考 菜鳥教程
source /etc/profile
source ~/.bash_profile
最終mysql的備份腳本mysql_dump.sh內(nèi)容如下:
#! /bin/bash
source /etc/profile
source ~/.bash_profile
login_user="root"
login_passwd=""
vDate=`date +%Y%m%d`
backup_dir="/home/data/backups/"$vDate"/"
echo$backup_dir
if[ ! -d $backup_dir ];then
mkdir -p $backup_dir
fi
# 將需要備份的數(shù)據(jù)放入
db_array=("數(shù)據(jù)庫1名字""數(shù)據(jù)庫2名字" "數(shù)據(jù)庫3名字") #配置要備份的數(shù)據(jù)庫
fordb_name in ${db_array[*]}
do
mysqldump -u root -p$login_passwd $db_name > $backup_dir$db_name.sql
done
# 刪除7天前備份的文件
find backup_dir -atime +7 -name "*.sql"-exec rm -rf {} \
echo"備份結(jié)束"
定時任務(wù)執(zhí)行
使用linux的crontab命令定時執(zhí)行備份數(shù)據(jù)的腳本
crontab -e
編輯定時任務(wù),按 i 進(jìn)入編輯模式
這里凌晨二點(diǎn)執(zhí)行一次定時器規(guī)則
00 02 * * * /bin/sh /test/mysql_dump.sh
編輯完保存即可,(夜貓子熬不到半夜兩點(diǎn))
按 【Esc】然后 輸入 :wq 保存退出
定時任務(wù)的執(zhí)行最小單位為分鐘,詳情代表如下:
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期幾 (0 - 6) (星期天 為0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一個月中的第幾天 (1 - 31)
| +-------------------- 小時 (0 - 23)
+------------------------- 分鐘 (0 - 59)
注意要開啟你的定時器,定時器常用操作命令如下:
crontab -e # 創(chuàng)建自己的一個任務(wù)調(diào)度,此時會進(jìn)入到vi編輯界面,來編寫我們要調(diào)度的任務(wù)
crontab -l # 列出定時的任務(wù)
crontab -r con_name # 刪除crontab文件
which ifconfig # 獲取命令路徑
/sbin/service crond start //啟動服務(wù)
/sbin/service crond stop //關(guān)閉服務(wù)
/sbin/service crond restart //重啟服務(wù)
/sbin/service crond reload //重新載入配置
/sbin/service crond status //啟動服務(wù)
chkconfig –level 35 crond on // 加?開機(jī)?動啟動:
----------------------------------------------------------------------------------------------------
service crond start //啟動服務(wù)
service crond stop //關(guān)閉服務(wù)
service crond restart //重啟服務(wù)
service crond reload //重新載入配置
service crond status //查看狀態(tài)
chkconfig crond on //設(shè)置開機(jī)自動啟動crond服務(wù):
systemctl enable crond.service // 設(shè)置開機(jī)自動啟動crond服務(wù):
chkconfig –list crond //開機(jī)級別的crond服務(wù)運(yùn)行情況 ,2、3、4、5級別開機(jī)會自動啟動crond服務(wù)
chkconfig crond off//取消開機(jī)自動啟動crond服務(wù):
crontab -e配置是針對某個用戶的,而編輯/etc/crontab是針對系統(tǒng)的任務(wù)
crontab -l //列出當(dāng)前的所有調(diào)度任務(wù)
crontab -l -u jp //列出用戶jp的所有調(diào)度任務(wù)
crontab -r //刪除所有任務(wù)調(diào)度工作
每天早上6點(diǎn)
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,因?yàn)閏ron把任何輸出都email到root的信箱了。
每兩個小時
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
晚上11點(diǎn)到早上8點(diǎn)之間每兩個小時和早上八點(diǎn)
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點(diǎn)
0 11 4 * 1-3 command line
1月1日早上4點(diǎn)
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出現(xiàn)錯誤,或者有數(shù)據(jù)輸出,數(shù)據(jù)作為郵件發(fā)給這個帳號 HOME=/
每小時執(zhí)行/etc/cron.hourly內(nèi)的腳本
01 * * * * root run-parts /etc/cron.hourly
每天執(zhí)行/etc/cron.daily內(nèi)的腳本
02 4 * * * root run-parts /etc/cron.daily
每星期執(zhí)行/etc/cron.weekly內(nèi)的腳本
22 4 * * 0 root run-parts /etc/cron.weekly
每月去執(zhí)行/etc/cron.monthly內(nèi)的腳本
42 4 1 * * root run-parts /etc/cron.monthly
每天的下午4點(diǎn)、5點(diǎn)、6點(diǎn)的5 min、15 min、25 min、35 min、45 min、55 min時執(zhí)行命令。
5,15,25,35,45,55 16,17,18 * * * command
每周一,三,五的下午3:00系統(tǒng)進(jìn)入維護(hù)狀態(tài),重新啟動系統(tǒng)。
00 15 * * 1,3,5 shutdown -r +5
每小時的10分,40分執(zhí)行用戶目錄下的innd/bbslin這個指令:
10,40 * * * * innd/bbslink
每小時的1分執(zhí)行用戶目錄下的bin/account這個指令:
1 * * * * bin/account
作者:老王
歡迎關(guān)注微信公眾號 : IT學(xué)習(xí)道場