1 Shell脚本案例 删除超过20天的日志文件 测试ok
#!/bin/sh
######
# 日志定时运行时间为每天0点1分
# 删除20天之前的日志文件,压缩一周之前的日志文件
# 日志文件时间是根据日志名称后面的日期来计算
# 运行脚本注意日志文件中是否有其他相同后缀的非日志文件和日志文件名称是否符合要求
######
#日志文件所在目录
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 配置定时执行,每天23点30分执行一次
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点执行):
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
执行 ./clear.sh
sh脚本执行报错bin/sh^M: bad interpreter: No such file or directory处理
原因
报这个错误通常为编码格式问题
解决办法
vim xxx.sh打开sh脚本文件
执行 :set ff 命令查看当前编码格式,此时可以看到类似如下的信息:
fileformat=dos
执行 :set ff=unix 命令将sh脚本文件格式改为linux的格式
执行 :wq! 命令强制保存退出,再次执行该脚本即可正常运行
查看时间
date 、date -R
不加参数可以直接看到当前日期时间
cal
不加参数可以直接看到本月月历
2.设置时间和日期
例如:将系统日期设定成2009年11月3日的命令
命令 : "date -s 11/03/2009"
将系统时间设定成下午5点55分55秒的命令