`

linux 运维

 
阅读更多
定期修改密码
cd /etc
lsattr passwd shadow
如果这2文件有带i属性, 则表示无法修改, 用下面命令去掉
chattr -i passwd shadow

然后是修改密码命令
passwd
输入新密码: ******
再次输入: ******
修改成功, 把2个文件加上i属性防止被窜改
chattr +i passwd shadow



定期清理磁盘空间
通用方法, 删除指定目录7天前的文件
find /appLog -type f -mtime +7 -exec rm {} \;

也或以针对nginx, tomcat处理
其中大都是由于nginx, tomcat的日志积压

1. 定期检查目录里的文件夹大小
进入目标目录
cd /slc/web-file/lizhiwei/APP

查看各目录磁盘空间占用, 把所有目录(包括子目录)都显示出来
du -h

子目录太多看着烦, 只显示1级目录就行了
du -h --max-depth=1

然后挑大的进去删除日志

2. 切割日志
1.tomcat采用 cronolog 从程序上把日志按天分切割
2.nginx采用crontab执行自己写的sh, 定时每天23:59分定时执行

三. 历史日志
tomcat 可以采用logback, 直接在配置上设置历史日志压缩及最近7天
<!-- 日志文件每天生成,保留30天的日志文件,防止日志打爆磁盘 -->
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                        <fileNamePattern>${log.base}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
                        <maxHistory>30</maxHistory>
                        <!--日志文件最大占用空间,防止日志打爆磁盘 -->
                        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                                <maxFileSize>100MB</maxFileSize>
                        </timeBasedFileNamingAndTriggeringPolicy>
                </rollingPolicy>


方法一:tomcat使用shell切割日志

cd /yf-weloop-rawdata/apache-tomcat-7.0.73/bin
d=`date --date='0 days ago' +%Y-%m-%d`  
d7=`date -d'7 day ago' +%Y-%m-%d`

echo '-----' 
echo 'tomcat catalina.out log backup start' 
echo 'system time: '`date` 
echo 'current date: '${d} 
echo 'next 7 days: '${d7} 

cd  ../logs/

echo 'copy catalina.out to catalina.out.'${d} 
cp catalina.out catalina.out.${d}
echo 'clear catalina.out' 
#这样直接把文件 ""> 的方法, 仅在redcap有效, 在centos使用, 后面的内容不会追加
echo "" > catalina.out 
echo "rm catalina.out -7d before: catalina.out.${d7}"
if [ -a "catalina.out.${d7}" ]; then
	rm -rf catalina.out.${d7}
	echo 'rm catalina.out.'${d7}' success' 
else
	echo 'rm catalina.out.'${d7}' failure, it''s not existx' 
fi

echo 'tomcat catalina.out log backup end' 
echo '-----' 



方法二:tomcat自身catalina.out的切割
step 1:
touch "$CATALINA_OUT"

#touch "$CATALINA_OUT"

step 2:
org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_OUT" 2>&1 "&"

org.apache.catalina.startup.Bootstrap "$@" start 2>1 \
      | cronolog "$CATALINA_OUT.%Y%m%d" >> /dev/null &

step 3:
在else下面的语句同step 2

效果



nginx 则需要自己写sh, 删除指定30天前的日志
#nx 日志文件所在的目录
LOGS_PATH=/usr/local/nginx/logs
## 获取昨天的 yyyy-MM-dd
YESTERDAY=$(date -d "yesterday" +%Y%m%d)
## 移动文件
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log
echo $(date +%Y-%m-%d" "%H:%M:%S)  保存昨天的日志文件 >> ${LOGS_PATH}/cut-log.log
## 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
echo $(date +%Y-%m-%d" "%H:%M:%S)  通知nginx重写日志 >> ${LOGS_PATH}/cut-log.log
## 删除15天前的日志
rm -f ${LOGS_PATH}/access_$(date -d "10 day ago" +%Y%m%d).log
rm -f ${LOGS_PATH}/error_$(date -d "10 day ago" +%Y%m%d).log
echo $(date +%Y-%m-%d" "%H:%M:%S)  删除15天前的日志:access_$(date -d "10 day ago" +%Y%m%d).log >> ${LOGS_PATH}/cut-log.log
echo $(date +%Y-%m-%d" "%H:%M:%S)  删除15天前的日志:error_$(date -d "10 day ago" +%Y%m%d).log >> ${LOGS_PATH}/cut-log.log



查看并发,连接数, 通过端口号
一般tomcat是8080
netstat -na | grep ESTAB | grep 8080 | wc -l

一般nginx是80
netstat -na | grep ESTAB | grep 80 | wc -l


文件排序, 日志数据处理分析
cat lizw.10.log |awk -F, '{print $(NF)}' > lizw.10-1.log
把日志里每行的最后一列打印到新的文件

-F, 以","作为分隔符
$(NF), 倒数第1列, 如果是$(NF-1), 则是倒数第2列

sort -u lizw.10.log > lizw.10.u.log
文件去重, 相同的行只留唯一

sort -nk 2 -t: lizw.10.u.log > lizw.10.sun.log
-nk 2 按数值排序, 以第2列为准
-t: 以":"作为列的分隔符


10进制<->16进制

10->16
printf "%x\n" 2579728
输出:275d10

16->10
printf "%d\n" 0x275d10
输出:2579728



筛选文件里匹配关键字的行
cat access.log.20170713|grep "deviceId"

筛选文件里匹配关键字的行里的内部 (-o)

cat access.log.20170713|grep -o "deviceId\":\w\{1,10\}"
或 标准正则表达式写法 (-P)
cat access.log.20170713|grep -oP "deviceId\":\d{1,10}"
  • 大小: 179 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics