实际中 linux的java运维必备的shell

下面的各个的linux的shell脚本,是我在实践中用到的,积累下来。部分脚本都做了修改,删除一些有坑的操作。

if else的判断,判断文件是否存在,判断数字大小。下面是shell脚本

#判断文件是否存在 且是否是文件
if [ -f test2.sh ]; then
	echo "file exist"
else 
	echo "file does not exist "
fi

#判断文件是否存在 且是否是文件
if [ -f test.sh ]; then
	echo "是文件"
fi

#键盘输入内容
echo -n "plese input a number "
read num
#判断输入内容的数字大小
if [ "$num" -lt "10" ]; then
	echo "little 10"
elif [ "$num" -gt "10" ]; then
	echo "great 10"
else 
	echo "nicai"
fi

修改文件名字

mv central.war09 central.war

找到正在运行的war包的进程,然后结束该进程。“|”表示一个管道的意思,可以理解为东西从管s道的一边流向另外一边。

ps -ef | grep central.war

kill -9 pid
运行jar文件
java -jar central.jar

一个xxx.sh脚本文件,要求是输出某个文件夹下一个文件内容到命令行界面。tail -n 表示尾部输入多少行,这里表示的是从尾部倒数10行

#!/bin/sh
cd /home/chenrui/Documents/my_shell
tail -n 10 test.sh

终端输出内容 输入到指定文件下

一个xxx.sh脚本文件,sh脚本中的命令可能会往终端中输出内容,现在的要求是sh脚本继续执行,输出的内容不需要向终端输出,输出到指定的文件夹内。

在shell命令中,通常会出现类似这样子的命令:1>&22>&12>1>,那么这些数字的意思是下面黑体字。

0 为stdin标准输入

1 stdout标准输出  

2 stderr标准错误 //输出一些错误的信息

&>error.log 表示是把标准输出和错误输出都输入到文件error.log中;
1>&2 意思是把标准输出重定向到标准错误;
2>&1 意思是把标准错误输出重定向到标准输出。

如ls某个不存在的文件

chenrui@ubuntu:~/Documents/my_shell$ ls hahah
ls: cannot access 'hahah': No such file or directory

那么使用

chenrui@ubuntu:~/Documents/my_shell$ ls haha 2>error.log

此刻查看error.log内容," 2>error.log " 是表示把错误的内容输出到error.log里了。

chenrui@ubuntu:~/Documents/my_shell$ more error.log 
ls: cannot access 'haha': No such file or directory

同理,如果要是正确的内容输入到error.log里去 2>error.log是输入不进去,直接在终端显示了。不信你可以试试,哈哈,试一下吧(篇幅有限我不能再填上去了)

在sh中运行jar包,然后把jar中的控制台输出输出到指定文件内

jarPath=/home/chenrui/java/
cd $jarPath

java -jar xxxx.jar >> error.log 2>&1

执行这个sh文件后,可以看到终端不允许你继续操作下条指令。需要在java -jar xxxx.jar >> error.log 2>&1的后面再加一个&符号就行了。java -jar xxxx.jar >> error.log 2>&1 &

我这里有一个memeda.war包,从jenkins构建以后生成的名字为memeda.war_newbuild。此时需要将新的newbuild包改名部署,老包也要改名备份

  1. 第一种方式:根据memeda.war包启动的端口找到对应的pid,然后kill
  2. 第二种方式:根据ps memeda.war命令找到对应的pid,然后kill

第一种方式

##############根据端口号结束进程##################
port=25010

#根据端口号查询对应的pid
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');

#杀掉对应的进程,如果pid不存在,则不执行
if [  -n  "$pid"  ];  then
   kill  -9  $pid;
    echo "结束端口 $port 进程:"$pid;

    ps -ef | grep memeda.war
	
    if [ -e memeda.war_newbuild ]; then
		echo "开始启动"
		mv memeda.war "memeda.war_"`date "+%Y%m%d_%H%M%S"`
		mv memeda.war_newbuild memeda.war

		./start.sh
		ps -ef | grep memeda.war
		echo "启动完成"
    fi
fi

第二种方式

##############根据ps命令结束进程##################
#根据war包查询对应的pid
pid=$(ps -ef | grep memeda.war | grep java | awk '{print $2}');

#杀掉对应的进程,如果pid不存在,则不执行
if [  -n  "$pid"  ];  then
   kill  -9  $pid;
    echo "结束进程:"$pid;

    ps -ef | grep memeda.war
	
    if [ -e memeda.war_newbuild ]; then
		echo "开始启动"
		mv memeda.war "memeda.war_"`date "+%Y%m%d_%H%M%S"`
		mv memeda.war_newbuild memeda.war

		./start.sh
		ps -ef | grep memeda.war
		echo "启动完成"
    fi
fi

注:start.sh脚本的内容与解释,在本文的 “终端输出内容 输入到指定文件下” 有解释。

这条命令:mv memeda.war "memeda.war_"`date "+%Y%m%d_%H%M%S"` ,在date中有个长得像单引号的,那个不是单引号

那个是tab键上面,1键左边的那个标号。切记不是单引号!

直接根据ps命令结束一个进程

ps -ef | grep memeda.war | grep -v grep | awk '{print $2}' | xargs kill -9

服务器定时任务

在服务器运行的爬虫,需要每个一段时间执行一次运行脚本
比如每分钟执行一次脚本

chenrui@ubuntu:~$ crontab -e
# m h  dom mon dow   command
*/1 * * * * sh /home/chenrui/test.sh

保存内容ctrl + o进入指令输入中,enter回车。
然后ctrl + x键退出。为了避免这种情况的出现,建议在crontab前使用export EDITOR=vim,让其使用vim编辑器。

war包shell启动脚本

#!/bin/bash
DIR="$( cd "$( dirname "$-1"  )" && pwd )"
cd "${DIR}"

APP_NAME=app.war

if [ -e ${APP_NAME}_newbuild ]; then
    if [ -e ${APP_NAME} ]; then
        BACKUP_NAME="${APP_NAME}_"`date "+%Y%m%d_%H%M%S"`
        echo "start backup to ${BACKUP_NAME}"
        mv ./${APP_NAME} ${BACKUP_NAME}
    fi
    echo "start rename newbuild"
    mv ./${APP_NAME}_newbuild ./${APP_NAME}
fi

ps -ef | grep ${DIR}/${APP_NAME} | awk '{print $2}' | xargs echo "kill old process "
ps -ef | grep ${DIR}/${APP_NAME} | awk '{print $2}' | xargs kill -9

echo "ready to start `expr \`date +%s%N\` / 1000000`"
sleep 5s

echo "执行后续启动脚本"
bash appStart.sh

shell脚本 for循环遍历内容并拼接成字符串

#!/bin/bash
for file in `ls ./Document`
do
    x=$x,$file 
done 
echo $x

如果存在错误 email me: chenrui@marsdl.com

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值