1 Shell腳本案例 刪除超過20天的日志文件? ? 測試ok
#!/bin/sh
######
# 日志定時運行時間為每天0點1分
# 刪除20天之前的日志文件,壓縮一周之前的日志文件
# 日志文件時間是根據(jù)日志名稱后面的日期來計算
# 運行腳本注意日志文件中是否有其他相同后綴的非日志文件和日志文件名稱是否符合要求
######
#日志文件所在目錄
path=/home/tomcat/apache-tomcat-project/logs
#進入日志目錄
cd $path
#catalina.out日志文件備份
#獲取前一天的日期
bak_date=`date +%Y-%m-%d -d "1 days ago"`
#備份catalina.out日志奸柬,后面添加日期
cp catalina.out catalina.out.$bak_date.log
#清空catalina.out日志文件
echo > catalina.out
#20天之前的日志文件刪除
#獲取20天之前的日期
del_date=`date +%Y-%m-%d -d "20 days ago"`
#獲取文件名中的日期字符串,然后對比時間進行相應的操作蠢终,localhost_access_log的后綴文件名一般是txt,這里包括txt文件
for n in `ls *.log *.txt -1`;do
m=`echo $n | awk -F. '{print $(NF-1)}'`
m=`echo ${m:0-10}`
if [[ $m < $del_date || $m = $del_date ]];then
echo file $n will be deleted.
rm -rf $n
fi
done
#一周之前的文件壓縮
#獲取一周之前的日期
zip_date=`date +%Y-%m-%d -d "7 days ago"`
#獲取文件名中的日期字符串茴她,然后對比時間進行相應的操作
for n in `ls *.log *.txt -1`;do
m=`echo $n | awk -F. '{print $(NF-1)}'`
m=`echo ${m:0-10}`
echo $n $m
if [ ! $m ]; then
echo "IS NULL"
continue
fi
if [[ $m < $zip_date || $m = $zip_date ]];then
echo file $n will be zip.
zip $n.zip $n
rm -rf $n
fi
done
2 配置定時執(zhí)行,每天23點30分執(zhí)行一次
crontab? -e?進入定時任務的編輯界面中
30 23 *? *? *? rootsh/mnt/software/shell/clear-tomcat-log.sh
二寻拂、為clean.sh文件添加權限
chmod 777 /mnt/tomcat/apache-tomcat-8.5.23/logs/clean.sh
添加這行(每月1號凌晨2點執(zhí)行):
0 2 1 * * sh?/mnt/tomcat/apache-tomcat-8.5.23/logs/clean.sh
則重啟下crond服務,命令為
?????使用 /etc/init.d/crond restart
?????或者service crond restart(Centos7下為systemctl restart crond)
進入指定文件到sh? ? ? ? ?cd /usr/local/apache-tomcat/? ? ? ? ? ? ? ? ? ? clear.sh
執(zhí)行? ./clear.sh
sh腳本執(zhí)行報錯bin/sh^M: bad interpreter: No such file or directory處理
原因
報這個錯誤通常為編碼格式問題
解決辦法
vim xxx.sh打開sh腳本文件
執(zhí)行? :set ff? 命令查看當前編碼格式,此時可以看到類似如下的信息:
fileformat=dos
執(zhí)行? :set ff=unix? ?命令將sh腳本文件格式改為linux的格式
執(zhí)行? :wq!? 命令強制保存退出,再次執(zhí)行該腳本即可正常運行
查看時間?
date? ? ? ? ? ? ? ? ? ? ? ? ? 、date -R
不加參數(shù)可以直接看到當前日期時間
cal
不加參數(shù)可以直接看到本月月歷
2.設置時間和日期
例如:將系統(tǒng)日期設定成2009年11月3日的命令
命令 : "date -s 11/03/2009"
將系統(tǒng)時間設定成下午5點55分55秒的命令