一、变更注意事项
1.部署平台:
a.重启服务时,通过部署平台跳到各服务器操作时,注意修改字符编码为export LANG=en_US.utf-8或zh_CN.GBK
b.服务器之间通过部署平台的dscp命令传输文件到目标服务器;如果连接目标服务器没有推送密码,opr申请权限后使用齐治堡垒机sftp工具上传,不要使用rz
命令上传(原因:如果原文件存在,使用rz命令不能覆盖原文件)
c.不管是通过部署平台dscp命令或者堡垒机的sftp工具上传文件到目标服务器,都要注意上传文件的更新时间、更新文件大小
2.pafa5管控平台:
a.在pafa5管控平台或服务器上修改配置文件后,需要检查是否修改正确,且需和开发确认
b.修改完pafa5配置项,需要跟开发确认是否重启应用或组件
4.服务器上:
a.修改配置文件前先必须备份
b.class文件、jar包、war包更新完后必须重启服务
c.删除文件必须先备份,再mv,观察2-3天后服务器正常运行就可以删除
d、应用重启必须要用应用重启脚本,tomcat重启要用tomcat_restart.sh脚本,重启完后要检查进程重启时间,检查cat监控、detector监控、F16监控是否恢复
3.数据库:
a.oracle执行脚本,sql脚本涉及数据量多时必须在命令窗口执行,发版执行sql脚本必须在命令窗口执行
b.mongo脚本执行时,mongo服务器和Secure CRT工具必须设置字符编码为en_US.utf-8,否则执行mongo脚本带中文时会出现中文乱码
C.执行oracle数据库操作(增删改)时记得commit提交事务;使用drop命令删除表,如不敢确定可以使用rename命令先对表重命名。
二、批量检测ip的端口是否连通
nc检测端口的用法
nc -z -w 10 -u%IP% %PORT%
-z表示检测或者扫描端口
-w表示超时时间
-u表示使用UDP协议,此参数为空,则为tcp协议
[@s136.ipcpu.com ~]# nc -z -w 10 -u 8.8.8.8 53
Connection to 8.8.8.8 53 port [udp/domain] succeeded!
[@s136.ipcpu.com ~]# nc -z -w 10 8.8.8.8 53
Connection to 8.8.8.8 53 port [tcp/domain] succeeded!
[@s136.ipcpu.com ~]# echo $?
0
[@s136.ipcpu.com ~]# nc -z -w 10 8.8.8.7 53
[@s136.ipcpu.com ~]# echo $?
1
端口成功联通返回值是0,提示succeeded;否则返回1,不提示任何数据
假如我们有这样一堆IP和端口。
#cat ports
119.181.69.96 8080
119.181.118.38 8000
119.181.20.18 8080
119.181.69.37 8080
cat ports | while read line;do
nc -z -w 10 $line > /dev/null 2>&1
if [ $? -eq 0 ];then
echo $line:OK
else
echo $line:Fail
fi
done
三、命令用法
nslookup工具:是一个监测网络中DNS服务器是否能正确实现域名解析的命令行工具
修改ip.txt配置文件内容
sed -i 's/10.220.55.69/10.1.55.70/g' 注意 -i选项编辑文件内容,默认只在终端显示时用新IP替换旧IP
lsof命令用法(list open file):
四、批量压缩和解压文件
tar -zcvf access.2019—07.log.tar.gz access.2019-07*.log
tar -zxvf access.2019—07.log.tar.gz -O /bankapp/nginx/log
五、自动化免密登录shell脚本
#!/bin/expect
Path=/home/tomcat
cd $Path
if [ -d $Path ];then
echo "ArchvLog already had done!" && exit 1
else
wget -c -q -t 3 http://ArchvLog.tar -O $Path && echo "ArchvLog.tar wget sucesstion" # -c 重新启动下载终端文件
if [ $? -eq 0 ];then
tar -xf /home/tomcat/ArchvLog.tar && echo "ArchvLog.tar is tared successlly"
echo "30 1 * * * /home/tomcat/ArchvLog/ArchvLog.sh >/dev/null 2>&1" >> /var/spool/cron/tomcat && echo "追加定时任务成功"
[ ! -f /home/tomcat/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -P '' -f /home/tomcat/.ssh/id_rsa.pub 2>&1 /dev/null #密钥对不存在则创建密钥
while read line;do
ip = `cat $line | cut -d " " -f1`
user = `cat $line | cut -d " " -f2`
pwd = `cat $line | cut -d " " -f3`
expect <<EOF
spawn ssh-copy-id -i /home/tomcat/.ssh/id_rsa.pub $user@$ip 2>&1 /dev/null # 复制公钥到目标主机
expect { # expect 实现自动输入密码
"yes/no" { send "yes ";exp_continue }
"password" { send "$pwd " }
}
expect eof
EOF
done < /home/tomcat/host_ip.txt
# exit
fi
fi
host_ip.txt 远程目标服务器IP
192.168.1.102
192.168.1.128
六、批量查询域名解析shell脚本和python脚本
shell脚本
function lookupyuming(){ for yuming in $@;do domain=`nslookup $yuming | grep 'name.*=' | awk '{print $1}'` ip=`nslookup $yuming | grep Address: | awk '{if(NR==2) print $NF}'` if [ -z $domain ];then echo "Not print domain,$ip" else echo "$domain,$ip" fi } cat $1 | while read yuming;do [ -n $yuming ] && lookupyuming $yuming done
cat yuming.txt www.baidu.com www.jingdong.com
Python脚本 [root@node2 data]# python pyjiexi.py [root@node2 data]# cat result.txt www.baidu.com 115.239.210.27 www.powerdns.com 188.166.104.92 [root@node2 data]# cat pyjiexi.py #!/usr/bin/env python #coding:utf-8 from socket import gethostbyname DOMAIN= "yuming.txt" with open(DOMAIN,'r') as f: for line in f.readlines(): try: host = gethostbyname(line.strip(' ')) #域名反解析得到的IP except Exception as e: with open('error.txt','a+') as ERR: #error.txt为没有IP绑定的域名 ERR.write(line.strip()+ ' ') else: with open('result.txt','a+') as r: #result.txt里面存储的是批量解析后的结果 r.write(line.strip(' ') + ' ') #显示有ip绑定的域名,用空格隔开 r.write(host + ' ')
七.正则表达式使用案例
1.匹配properties或war结尾的文件 egrep "(.properties)|(.war)" /etc/conf.properties 2.匹配IP地址正则表达式 IP地址数字从0-255 0-9数字:[0-9] 10-99数字:[1-9][0-9] 100-199数字: 1[0-9][0-9] 200-249数字: 2[0-4][0-9] 250-255数字: 25[0-5] <(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>
八、日志归档脚本获取IP失败
当前终端shell环境 /bash/sbin/ip 当前命令shell环境 /usr/sbin/ip 由于当前shell与当前命令的shell环境不一致导致ip=`ifconfig eth0 | grep addr | awk -F " " '{print $2}'`获取${Ip}获取ip失败
九、shell脚本切割tomcat日志
说明:这个脚本很简单,linux用个定时器没分钟定时扫描日志文件的大小,就是当文件大于100M的时候,先把文件复制到指定的目录,再清空原先tomcat的日志文件。
这里是用crontab来使用定时器,至于这个命令的语法在这里就不多说,有兴趣的可以自行google,这里还是有个小小的不足,因为是按每分钟定时去扫描日志文件,所以最后切割文件大小还是会在100~102M之间。
1、编写 monitor_script.sh
#!/bin/sh log_dir=/var/log/tomcat monitor_file=$1 #tomcat目录下的catalina.out文件的绝对路径 file_size=`du -m $monitor_file | awk '{print $1}'` if [ $file_size -ge 100 ] then if [ ! -d $log_dir ] then mkdir /var/log/tomcat #创建保存切割文件目录,这个路径可以自行修改,保存到你想要的目录 fi cp $1 /var/log/tomcat/log-`date +%Y-%m-%d-%H%M%S`.log #保存日志文件 echo `date +%Y-%m-%d-%H:%M:%S`":文件切割" >>/var/log/tomcat/split.log #记录切割日志 echo "" > $1 #清空tomcat的log/catalina.out文件内容 fi
2.定时任务
*/1 * * * * sh /lee_js/monitor_script.sh /opt/apache-tomcat-7.0.67/logs/catalina.out #第一个路径是脚本的路径,第二个参数是tomcat下catalina.out文件的绝对路径
十、配置tomcat服务开自启
配置 Tomcat 服务 方法一、 新建服务脚本 [root@localhost ~]# vim /etc/init.d/tomcat 添加脚本内容 #!/bin/bash # description: Tomcat7 Start Stop Restart # processname: tomcat7 # chkconfig: 234 20 80 含义分别 "启动级别为2|3|4" "启动优先级是20" "关机优先级是80" CATALINA_HOME=/usr/local/tomcat/apache-tomcat-7.0.77 case $1 in start) sh $CATALINA_HOME/bin/startup.sh ;; stop) sh $CATALINA_HOME/bin/shutdown.sh ;; restart) sh $CATALINA_HOME/bin/shutdown.sh sh $CATALINA_HOME/bin/startup.sh ;; *) echo 'please use : tomcat {start | stop | restart}' ;; esac exit 0 执行脚本,启动、停止 和 重启服务。 启动:service tomcat start 停止:service tomcat stop 重启:service tomcat restart Tomcat 配置开机自启动 向chkconfig添加 tomcat 服务的管理 [root@localhost ~]# chkconfig --add tomcat 设置tomcat服务自启动 [root@localhost ~]# chkconfig tomcat on 查看tomcat的启动状态 [root@localhost ~]# chkconfig --list | grep tomcat 状态如下: [root@localhost ~]# chkconfig –list | grep tomcat tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off 关闭tomcat服务自启动:chkconfig tomcat off 删除tomcat服务在chkconfig上的管理:chkconfig –del tomcat
方法二、文件/etc/rc.local末尾追加如下行
su - tomcat -c "/home/tomcat/tomcat_restart.sh start"
十一、Java内存溢出概念理解
搞Java开发的,经常会碰到下面两种异常: 1、java.lang.OutOfMemoryError: PermGen space 2、java.lang.OutOfMemoryError: Java heap space 要详细解释这两种异常,需要简单重提下Java内存模型。 (Java内存模型是描述Java程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节。 在Java虚拟机中,内存分为三个代:新生代(New)、老生代(Old)、永久代(Perm)。 ( 1)新生代New:新建的对象都存放这里 (2)老生代Old:存放从新生代New中迁移过来的生命周期较久的对象。新生代New和老生代Old共同组成了堆内存。 (3)永久代Perm:是非堆内存的组成部分。主要存放加载的Class类级对象如class本身,method,field等等。 如果出现java.lang.OutOfMemoryError: Java heap space异常,说明Java虚拟机的堆内存不够。原因有二: (1)Java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整。 (2)代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)。 如果出现java.lang.OutOfMemoryError: PermGen space,说明是Java虚拟机对永久代Perm内存设置不够。 一般出现这种情况,都是程序启动需要加载大量的第三方jar包。例如:在一个Tomcat下部署了太多的应用。 从代码的角度,软件开发人员主要关注java.lang.OutOfMemoryError: Java heap space异常,减少不必要的对象创建,同时避免内存泄漏。 最后,总结下排查内存故障的方法和技巧有哪些: 1、top命令:Linux命令。可以查看实时的内存使用情况。 2、jmap -histo:live [pid],然后分析具体的对象数目和占用内存大小,从而定位代码。 3、jmap -dump:live,format=b,file=xxx.xxx [pid],然后利用MAT工具分析是否存在内存泄漏等等。
工作中常用命令用法
1.查看某个服务打开的文件 lsof /bankapp/nginx/nginx.conf 2.查看哪些进程打开/bankapp目录下的文件 lsof /bankapp/ 3. 查看指定进程名打开的文件 lsof -c tomcat 4.查看指定进程号打开的文件 lsof -p pid 5.查看指定端口有哪些进程再用 lsof -i:8080
清空服务器大文件方法
1、 直接重定向
> pafa.log
2、 使用cat、cp或echo命令:
cat /dev/null > pafa.log
cp /dev/null > pafa.log
echo "" > pafa.log
3、使用dd命令:
dd if=/dev/null of=pafa.log
chattr命令用法
chattr +i /etc/sudoers 文件添加不可修改或删除属性
chmod +w /etc/sudoers 文件添加修改权限
处理磁盘目录告警
1、清理logs目录下7天前的文件
find /bankapp/tomcat/logs -type f -mtime +7 -name "pafa*.log" -exec rm -rf {} ;
2、移动logs目录下60天前的文件到备份目录
find /bankapp/tomcat/logs -type f -mtime +7 -name "pafa*.log" -exec mv {} /log_bak/
3、删除90天前的日志并删除掉
tar -zcf pafa.log.20210207.tar.gz `find /bankapp/tomcat/logs/ -type -f -mtime 90` --remove-files
配置主机网络
1、配置指定ip方法
[root@hdss7-11 ~]$cat /etc/sysconfig/network-scripts/ifcfg-ens33
NAME="ens33" DEVICE="ens33" BOOTPROTO="none" ONBOOT="yes" #MAC=00:0c:29:ae:0a:bf IPADDR=10.4.7.11 NETMASK=255.255.255.0 GATEWAY=10.4.7.2 DNS1=10.4.7.11
2.配置随机网络