1.批量kill进程号
eth='5668 5673 7733 7738 10512 10517 12453 12458 17134 17139 18075 18080 20340 20345 21120'
for name in $eth
do
echo "Pid is $name"
echo "kill -9 $name"
kill -9 $name
done
2.通过进程名kill
ps -ef| grep tomcat|awk '{print $2}'|xargs kill -9
3.查找所有的java进行,然后打印出来
pidlist=`ps -ef|grep java |grep -v "grep" |awk '{print $2}'`
if [ "$pidlist" = "" ]
then
echo "no java process alive"
else
for pid in ${pidlist}
{
echo "java process is: $pid:"
}
fi
4./home目录里面有data目录,data目录里面有a、b、c、d、e五个目录,现在要把data目录里面除过e目录之外的所有目录拷贝到/bak目录中
方法一:终端命令行下执行以下命令
cp -R `find /home/data -type d -path /home/data/e -prune -o -print | sed 1d ` /bak
########################################################
脚本实现
脚本存放路径/home/osyunwei.sh
vi /home/osyunwei.sh #编辑脚本,添加下面的代码
#!/bin/sh
cp -R `find /home/data -type d -path /home/data/e -prune -o -print | sed 1d ` /bak
chmod +x /home/osyunwei.sh #添加脚本执行权限
cd /home #进入脚本存放目录
./osyunwei.sh #执行脚本
########################################################
方法二:使用cp命令复制的时候,只能排除一个目录不被复制,如果想排除两个或者多个目录的话,就需要使用rsync命令来实现了,看下面的例子
如果要排除/home/data目录下面的a、b、c、三个目录,同时拷贝其它所有目录,执行以下命令
yum install rsync #安装rsync
rsync -av --exclude data/a --exclude data/b --exclude data/c data /bak
注意:--exclude后面的路径不能为绝对路径,必须为相对路径才可以,否则出错。
----------------------------------------------------------------------------
5.一键启停服务(需要服务结构都一致)
#!/bin/sh
echo "一键启停10.39服务"
command=$1
if [ $# -ne 1 ]
then
echo "usage: $0 stop|start"
exit
fi
server_list="pluto-ps-server-new pluto-ps-support-server pluto-ps-company-new"
echo "**********$command 服务**********"
for name in $server_list
do
echo "######$command $name ######"
server_name=/data/$name/bin/server.sh
#echo "/bin/bash $server_name $command"
/bin/bash $server_name $command
echo "等待3秒"
sleep 3
process_number=`ps -ef | grep /data/$name | grep -v 'grep'| wc -l`
#echo "$name 进程数:$process_number"
processId=`ps -ef | grep /data/$name | grep -v 'grep' | awk '{ print $2 }'`
for ID in $processId
do
echo "processID:$ID"
done
if [ $process_number -eq 1 ];then
echo "$name 服务已启动"
elif [ $process_number -eq 0 ];then
echo "$name 服务已停止"
else
echo "$name 已开启多个进程,请确认服务是否正常"
fi
done
echo "**********$command 服务结束**********"
6.查找配置文件进行替换
#!/bin/bash
if [ $# != 1 ] ; then
echo "请输入文件路径 eg: 目标路径"
exit 1;
fi
project=$1
Filepath=/data/$1/conf/env
WebPath=/data/$1/WEB-INF/classes
echo "配置文件目录:$Filepath"
remoting=remoting.properties
if [ -d "$WebPath" ];then
cd $WebPath
echo "替换目录:$WebPath"
if [ -f "$remoting" ]; then
echo "替换$remoting文件的配置"
find $Filepath -name $remoting | xargs sed -ri 's/rabbit.address=([0-9]{1,3}\.){3}[0-9]{1,3}/rabbit.address=192.168.10.59/g'
find $Filepath -name $remoting | xargs sed -i 's/rabbit.username=.*/rabbit.username=it/g'
find $Filepath -name $remoting | xargs sed -i 's/rabbit.password=.*/rabbit.password=its123/g'
find $Filepath -name $remoting | xargs sed -i 's/virtualhost=.*/virtualhost=\//g'
find $Filepath -name $remoting | xargs sed -i 's/virtual=.*/virtual=\//g'
#文件服务器
find $Filepath -name $remoting | xargs sed -ri 's/server=([0-9]{1,3}\.){3}[0-9]{1,3}/server=192.168.10.59/g'
find $Filepath -name $remoting | xargs sed -i 's/user=.*/user=it/g'
find $Filepath -name $remoting | xargs sed -i 's/password=.*/password=its123/g'
fi
fi
7.远程拷贝
将192.168.10.55机器上面/data/pluto-is/lib下面的文件拷贝到本地/data/pluto-is/lib下面
[root@localhost venus-web-fin]# scp [email protected]:/data/pluto-is/lib/* /data/pluto-is/lib/
shell脚本密码远程拷贝:
#!/bin/bash
orgFile=/home/jenkins/file/*.pdf
sshpass -p 'passwd' scp $orgFile [email protected]:/home/node/
8.Linux shell判断文件和文件夹是否存在
myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log"
#这里的-d 参数判断$myPath是否存在
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi
#这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi
9.通过端口查看应用程序(例如:查找6028端口)
ps -ef | grep `netstat -anpl | grep 6028 | awk NR==1'{ print $7 }' | grep -o "[0-9]*[0-9]" `
10.配置jenkins自动开机启动以及service脚本
1).将脚本存放于/etc/init.d目录,并且命名为jenkins
#!/bin/bash
#gedit /etc/init.d/jenkins
# chkconfig: 2345 10 90 其中2345是默认启动级别,10是启动优先级,90是停止优先级,优先级范围是0-100,数字越大,优先级越低
#需要需要加载环境变量,请去掉下行注释
#export JAVA_HOME=/usr/local/java/jdk1.8.0_211
prog=jenkins
start() {
nohup /usr/local/java/jdk1.8.0_211/bin/java -jar /home/jenkins/jenkins.war --httpPort=8099 > /home/jenkins/nohup.out &
}
stop() {
ps -ef| grep jenkins | grep -v 'grep' |awk '{print $2}'|xargs kill -9
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $prog {start|stop}"
exit 1
esac
Nginx示例:
#!/bin/bash
#
# chkconfig: - 85 15
# description: Nginx is a World Wide Web server.
# processname: nginx
nginx=/usr/local/webserver/nginx/sbin/nginx
conf=/usr/local/webserver/nginx/conf/nginx.conf
case $1 in
start)
echo -n "Starting Nginx"
$nginx -c $conf
echo " done"
;;
stop)
echo -n "Stopping Nginx"
killall -9 nginx
echo " done"
;;
test)
$nginx -t -c $conf
;;
reload)
echo -n "Reloading Nginx"
ps auxww | grep nginx | grep master | awk '{print $2}' | xargs kill -HUP
echo " done"
;;
restart)
$0 stop
$0 start
;;
show)
ps -aux|grep nginx
;;
*)
echo -n "Usage: $0 {start|restart|reload|stop|test|show}"
;;
esac
参考文献:nginx启动、重启、关闭_helloxiaozhe的博客-CSDN博客_nginx启动
2.chkconfig --add jenkins
3.检查8099端口是否开放
查看是否开启防火墙
systemctl status firewalld
查看是否开放端口8099
firewall-cmd --list-ports
没有开放,则加入
firewall-cmd --permanent --zone=public --add-port=8099/tcp
重启防火墙
systemctl reload firewalld
11.备份mysql脚本命令
#!/bin/bash
#SHELL_DAY=$(date '+%Y%m%d%H%M%S')
SHELL_DAY=$(date '+%Y%m%d')
BACK_DIR="/data/sql_bak"
HOST="机器IP"
ACCOUNT="数据库用户名"
MYSQLDUMP="/usr/local/mysql5.7/bin/mysqldump"
${MYSQLDUMP} -u${ACCOUNT} -p'数据库密码' 数据库名 > ${BACK_DIR}/数据库名_${SHELL_DAY}.sql
参考文献:
nginx启动、重启、关闭_helloxiaozhe的博客-CSDN博客_nginx启动
linux服务开机启动 - 胡国洪 - 博客园
12.Window强制关闭进程并删除文件
tasklist 查询进程
taskkill /f /t 强制关闭进程和子进程
@echo off
echo 清除搜狗广告程序,稍等......
cd C:\Program Files (x86)\SmartCloudInput\1.4.4.10311
taskkill -f -t -im SCHelper.exe
taskkill /f /t /pid 端口
tasklist | findstr "SCHelper.exe"
del /f /s SCHelper.exe
echo 清除完成!
echo. & pause
13.替换文件内容
#!/bin/bash
filelist="bxds-sem5.html bxds-sem90.html"
for name in $filelist
do
echo "file is $name"
#正则表达式获取数字
var1_key=`echo $name | tr -cd "[0-9]"`
sem="gj-sem"$var1_key
new="bxds-sem"$var1_key
file="/home/rocketai/url/"$name
echo $sem
echo $new
#一次性替换多个内容
sed -i "s/管家/大使/g; s/"$sem"/"$new"/g" $file
#将带abc.png(abc后面3个字符) 文件替换成abc.jpg
sed -i "s/"$new"\.[a-z][a-z][a-z]/"$new".jpg/g" $file
done
14.检测java服务启动是否正常
#项目对应模块的日志文件
APPOUT="/data/logs/ps-server.log"
APP=abc-server
function checkPro(){
echo "服务启动中,请稍等"
num=1
while test $num -le 60
do
if [ -f "$APPOUT" ]; then
CHECK_RESULT=`cat $APPOUT | grep 'report to eureka' | wc -l`
if test $CHECK_RESULT -eq 0 ; then
CHECK_RESULT=`cat $APPOUT | grep 'Tomcat started' | wc -l`
fi
elif [ -f "$APPOUTFILE" ]; then
CHECK_RESULT=`cat $APPOUTFILE | grep 'report to eureka' | wc -l`
if test $CHECK_RESULT -eq 0 ; then
CHECK_RESULT=`cat $APPOUTFILE | grep 'Tomcat started' | wc -l`
fi
fi
#echo $num
#CHECK_RESULT=`cat $APPOUT | grep 'report to eureka' | wc -l`
if test $CHECK_RESULT -eq 1 ; then
echo "【服务启动成功】"
exit 0
else
sleep 5
fi
let num++
done
echo "【服务启动异常,请查看服务日志】"
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXX' \ -H 'Content-Type: application/json' \-d '{"msgtype": "text","text": {"content": "'$APP' 服务启动失败,请查看日志"}}'
exit
}
15.通过企业微信(机器人)发送消息通知
1.企业群添加机器人获取webhook地址
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXX
2.shell脚本添加此代码
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXX' \ -H 'Content-Type: application/json' \-d '{"msgtype": "text","text": {"content": "'$APP' 服务启动失败,请查看日志"}}'
16.更改服务器某个应用程序的时间
1.安装libfaketime
yum install epel-release 然后 yum install libfaketime
2.指定开始日期@2022-03-23 19:00:00的情况下运行测试程序
export LD_PRELOAD=/usr/lib64/faketime/libfaketime.so.1 FAKETIME_NO_CACHE=1 FAKETIME_DONT_FAKE_MONOTONIC=1 FAKETIME="@2022-03-23 19:00:00"
a.如果是通过java -jar test.jar 启动,在java前添加
LD_PRELOAD=/usr/lib64/faketime/libfaketime.so.1 FAKETIME_NO_CACHE=1 FAKETIME_DONT_FAKE_MONOTONIC=1 FAKETIME="@2022-03-23 19:00:00" java -jar test.jar
b.通过tomcat 启动
在startup.sh脚本中添加一行
export LD_PRELOAD=/usr/lib64/faketime/libfaketime.so.1 FAKETIME_NO_CACHE=1 FAKETIME_DONT_FAKE_MONOTONIC=1 FAKETIME="@2022-03-23 19:00:00"
参考文献:
https://102no.com/2019/11/26/libfaketime-use/
17.占用磁盘空间最大的那几个目录
du -h -m --max-depth=1 ./ | sort -nr
-h 表示以人们通俗易懂的方式显示,如以k/M/g为单位进行显示,而不是以Byte为单位。
-m 以M为单位进行显示。
--max-depth=x 表示显示目录的最大深度,其中x表示最大深度。
sort -nr表示对第一列的数值(即磁盘空间占用情况)进行降序排序,-n表示进行数值比较,-r表示进行降序排序
proc 目录 进程ID 生成对应一个文件夹,如果文件占用比较大,重启该服务
18.top 命令倒序显示
执行top命令后,执行SHIFT +F ,可以选择按某列排序,例如选择n后,就会按字段%MEM排序
shift+m 或大写键M 让top命令按字段%MEM来排序
Shift+p 或大写键盘P 让top命令按字段%CPU来排序
ps命令找出占用内存资源最多的5个进程
ps aux | head -1;ps aux |grep -v PID |sort -rn -k +4 | head -5