1.编写脚本xxx.sh
#!/bin/bash
PACKAGE_DIR=/home/program/invoice/
JAR=invoice.jar
APP_NAME="$PACKAGE_DIR$JAR"
PID=0
#加载jps命令防止ssh不能使用jps
source /etc/profile;jps
#检查进程id
checkpid(){
running=`jps -l | grep $APP_NAME`
if [ -n "$running" ] ;
then
PID=`echo $running |awk '{print $1}'`
else
PID=0
fi
}
#停止进程
stop(){
checkpid
echo -e "stop before checkpid $PID"
if [ $PID -ne 0 ];
then
echo -e "stopping $APP_NAME PID=$PID"
kill $PID
else
echo -e "$APP_NAME not running"
fi
}
#启动进程
start(){
checkpid
echo -e "start before check $PID"
if [ $PID -ne 0 ];
then
echo -e "warn:$APP_NAME already started! (pid=$PID) "
else
echo -e "Starting $APP_NAME "
nohup java -jar -Dspring.application.name=invoice -Dspring.cloud.config.profile=dev -Xms256m -Xmx256m -Xss256k $APP_NAME > /dev/null 2>&1 &
checkpid
if [ $PID -ne 0 ];
then
echo -e "Started success"
else
echo -e "Failed please review logs"
fi
fi
}
#备份包
backup(){
cd $PACKAGE_DIR
mv "$JAR" "$JAR`(date +%Y%m%d-%H%M%S)`"
}
#重启
restart(){
stop
sleep 3s
start
}
#判断shell执行的命令
if [ ! -n "$1" ];
then
echo "not input default restart"
restart
else
echo "input $1"
case "$1" in
'start')
start
;;
'stop')
stop
;;
'restart')
restart
;;
'backup')
backup
;;
*)
echo "usage :$1 {start|stop|restart}"
exit 1
esac
fi
2.本地重启
./xxx.sh
3.远程ssh
ssh root@ip "bash xxx.sh && exit"
注意问题:
ssh命令后面跟shell的时候,最好用引号括起来,多条命令用&&来逐条执行
不过命令一般需要设置免密登录