好用的脚本

一、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

hhhhh