linux上定時執行某些腳本是管理服務器的時候比較常用的場景,比如定時檢查進程是否存在,定時啟動或關閉進程,定時檢查日志刪除日志等。
當我打開google百度crontab時長篇大論的一大堆,詳細解釋的一大堆,各種抄來抄去,現在覺得資源多了未必是好事。
假設是定時執行shell,來移動log文件
找到個網上的腳本:
#!/bin/bashlog_path="" #此處定義你的日志文件夾路徑exPRied_time=7 #此處定義你的日志過期時間,如7天function mvLogs(){ # 獲取系統時間,所有時間格式都是秒 local currentDate=`date +%s` echo "current date: " $currentDate for file in `find $1 -name "*.log"` #此處定義文件名格式,避免誤刪 do local name=$file local modifyDate=$(stat -c %Y $file) #對比時間,算出日志存在時間,距離最近一次修改 local logExistTime=$(($currentDate - $modifyDate)) logExistTime=$(($logExistTime/86400)) if [ $logExistTime -gt $expried_time ]; then echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: yes" #rm -f $file else echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: no" fi done}mvLogs /home/admin/web-deploy/logs
我的需求:線上有web1 web2 兩臺機器,后面是一臺發布機器。
需要檢查web1和web2的機器上的log文件,如果超出3天,就講這些文件移入mount的文件夾內,目錄區分web1,web2。
放在web機器上的腳本修改:
#!/bin/bash
#傳入參數為掃描文件夾路徑function mvLogs(){ echo "-----------------------------------------------------------" date +"%Y-%m-%d %H:%M" # 獲取系統時間,所有時間格式都是秒 local currentDate=`date +%s` echo "current date: " $currentDate for file in `find $1 -name "*.log.*"` #此處定義文件名格式,避免誤刪 do local name=$file local modifyDate=$(stat -c %Y $file) #對比時間,算出日志存在時間,距離最近一次修改 local logExistTime=$(($currentDate - $modifyDate)) logExistTime=$(($logExistTime/86400)) if [ $logExistTime -gt $expried_time ]; then echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: yes" cp $file /mnt/newlogs/$2/web #rm $file; else echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: no" fi done}mvLogs /home/admin/web-deploy/logs $machine_name
那么我只需要在發布機器上調用web機器上的這個腳本,就可以檢查web機器本地log情況,并處理。需要傳機器代號,如web1。
發布機上的腳本:
#!/bin/bash
expried_time=3;SERVERS="web1 web2";function mvLogs(){ for server in $SERVERS;do echo $server; local machine="svr_"$server; echo $machine; ssh admin@$machine "sh /home/admin/logcheck/mvlog.sh "$server" "$expried_timedone}mvLogs
這樣就可以再發布機上控制比對時間了。
crontab
修改本用戶下的定時任務:crontab -e查看本用戶下的定時任務
crontab -l
配置如下:
45 15 * * * sh /home/productscm/logcheck/mvlog.sh >> /home/productscm/logcheck/log/mvlog.log 2>&1
如此就會在每天的15點45分是執行上面的邏輯。
*/1 * * * * sh /home/productscm/logcheck/mvlog.sh >> /home/productscm/logcheck/log/mvlog.log 2>&1
一分鐘執行一次 用來測試 哈哈~
傳個圖片玩~
新聞熱點
疑難解答