好用的脚本
一、CentOS 8 设置jar包开机自启动
首先我们要保证服务器上有jdk,这里我们的JAVA_HOME=/usr/local/java/jdk
这里我们以一个名为halo.jar的jar包为例
1.启动脚本halo.sh
位置 /home/halo.sh
其中不能包含多余的空格和tab
#!/bin/bash
JAVA_HOME=/usr/local/java/jdk
PATH=$PATH:$JAVA_HOME/bin
#JAR根位置
JAR_ROOT=/home/halo
#JAR位置
JAR_PATH=$JAR_ROOT/halo.jar
#LOG位置
LOG_PATH=$JAR_ROOT/halo.log
#LOG_PATH=/dev/null
args='-Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M'
pid=`ps -ef|grep java|grep $JAR_PATH|awk '{print $2}'`
start() {
if [ ! $pid ]; then
log=`nohup java -Dfile.encoding=utf-8 -jar $args $JAR_PATH >> $LOG_PATH 2>&1 &`
sleep 0.3
pid=`ps -ef|grep java|grep $JAR_PATH|awk '{print $2}'`
if [ $pid ]; then
echo "$JAR_PATH start success!! pid is $pid"
else
echo "$JAR_PATH start failed."
echo "$log"
fi
else
echo "$JAR_PATH is running... pid is $pid"
fi
}
stop() {
if [ $pid ]; then
kill -9 $pid
echo "$JAR_PATH stop success!!"
else
echo "$JAR_PATH has stopped."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
echo "$JAR_PATH is restarting..."
start
;;
*)
echo "Userage: $0 {start|stop|restart}"
exit 1
esac
# 防止出现\r不能解析的错误
dos2unix /home/halo/halo.sh
2.自定义开机启动命令
vim /etc/systemd/system/halo.service
[Unit]
Description=halo
After=network.target
[Service]
Type=forking
KillMode=process
ExecStart=/bin/bash /home/halo.sh start
ExecReload=/bin/bash /home/halo.sh restart
ExecStop=/bin/bash /home/halo.sh stop
[Install]
WantedBy=multi-user.target
3.添加执行权限
chmod +x /home/halo/halo.jar /home/halo/halo.sh /etc/systemd/system/halo.service
4.运行
systemctl daemon-reload # 重载服务
systemctl start halo.service # 启动服务
systemctl status halo.service # 查看服务状态
systemctl enable halo.service # 添加开机启动服务
-------------------------------------------------
# 其他的相关的命令
systemctl start halo.service # 启动服务
systemctl stop halo.service #关闭服务
systemctl restart halo.service # 重启服务
systemctl status halo.service #查看服务状态
systemctl enable halo.service # 添加开机启动服务
systemctl disable halo.service #取消开机启动
二、启动多个jar样例
#!/bin/bash
#PATH=/usr/bin
pathRoot="/home/seal/isdu/"
paths=("isdusvr-gateway" "isdusvr-auth")
start() {
for path in ${paths[*]}; do
if [ $1 ] && [ $path != $1 ]; then
continue
fi
path=$pathRoot$path
pid=`ps -ef|grep java|grep $path.jar|awk '{print $2}'`
if [ ! $pid ] && [ -s $path.jar ]; then
log=`nohup java -jar -Xms300M -Xmx300M -Xmn200M -XX:SurvivorRatio=6 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC $path.jar >> $path.log 2>&1 &`
sleep 0.5
pid=`ps -ef|grep java|grep $path.jar|awk '{print $2}'`
if [ $pid ]; then
echo "$path.jar start success!! pid is $pid"
else
echo "$path.jar start failed."
echo "$log"
fi
elif [ $pid ]; then
echo "$path.jar has started"
else
echo "$path.jar is not exsit!"
fi
done
}
stop() {
for path in ${paths[*]}; do
if [ $1 ] && [ $path != $1 ]; then
continue
fi
path=$pathRoot$path
pid=`ps -ef|grep java|grep $path.jar|awk '{print $2}'`
if [ $pid ]; then
kill -9 $pid
echo "$path.jar stop success!!"
else
echo "$path.jar has stopped."
fi
done
}
status() {
for path in ${paths[*]}; do
path=$pathRoot$path
pid=`ps -ef|grep java|grep $path.jar|awk '{print $2}'`
if [ $pid ]; then
echo "$path.jar is running!! pid is $pid"
else
echo "$path.jar has stopped."
fi
done
}
case "$1" in
start)
start $2
;;
stop)
stop $2
;;
restart)
stop $2
echo "$path.jar is restarting..."
start $2
;;
status)
status
;;
*)
echo "Userage: $0 {start|stop|restart|status}"
exit 1
esac
三、万能启动脚本
#!/bin/bash
names=("protein_function")
cmds=("java -jar -Xms200M -Xmx200M -Xmn120M protein_function.jar")
SHELL_PATH="/home/weilab/protein_function/backend"
pre_start() {
case "$1" in
0)
mvn clean package -Dmaven.test.skip=true
mv target/ai-backend-template.jar protein_function.jar
;;
*)
;;
esac
}
start() {
cd $SHELL_PATH
for((i=0;i<${#cmds[@]};i++)); do
if [ $1 ] && [ ${path[i]} != $1 ]; then continue; fi
pre_start $i
pid=`ps -ef|grep "${cmds[i]}"|grep -v grep|awk '{print $2}'`
if [ ! $pid ]; then
log=`nohup ${cmds[i]} >> ${names[i]}.log 2>&1 &`
sleep 0.5
pid=`ps -ef|grep "${cmds[i]}"|grep -v grep|awk '{print $2}'`
if [ $pid ]; then
echo "${names[i]} start success!! pid is $pid"
else
echo "${names[i]} start failed."
echo "$log"
fi
elif [ $pid ]; then
echo "${names[i]} has started"
else
echo "${names[i]} is not exsit!"
fi
done
}
stop() {
for((i=0;i<${#cmds[@]};i++)); do
if [ $1 ] && [ ${path[i]} != $1 ]; then
continue
fi
pid=`ps -ef|grep "${cmds[i]}"|grep -v grep|awk '{print $2}'`
if [ $pid ]; then
kill -9 $pid
echo "${names[i]} stop success!!"
else
echo "${names[i]} has stopped."
fi
done
}
status() {
for((i=0;i<${#cmds[@]};i++)); do
if [ $1 ] && [ ${path[i]} != $1 ]; then
continue
fi
pid=`ps -ef|grep "${cmds[i]}"|grep -v grep|awk '{print $2}'`
if [ $pid ]; then
echo "${names[i]} is running!! pid is $pid"
else
echo "${names[i]} has stopped."
fi
done
}
case "$1" in
start)
start $2
;;
stop)
stop $2
;;
restart)
stop $2
echo "${names[i]} is restarting..."
start $2
;;
status)
status
;;
*)
echo "Userage: $0 {start|stop|restart|status}"
exit 1
esac
四、截取指定行
#!/bin/bash
line=`sed -n '/--my-data-my-data--/=' $1 |awk '{print $1}'`
array=(${line// /})
for((i=0;i<${#array[@]};i+=2)); do
if [ $((i+1)) -gt $((${#array[@]}-1)) ];then echo "please contain even [--my-data-my-data--] string"; exit 1;fi
sed -n $((${array[i]}+1)),$((${array[i+1]}-1))p $1 > $2
done
# 使用
./cut-line.sh data out.log
五、ssh自动登录
需要先安装expect,然后用expect执行脚本
apt install expect
#!/usr/bin/expect -f
set timeout -1
set ip sducat.top
set port 7072
set user root
set password Root!2333
spawn ssh -p $port $user@$ip
expect "password:"
send "$password\r"
interact
Comments | 0 条评论