在当前⽬录中 java -jar xxx.jar 这仅仅是前台运⾏退出就失效后台运⾏:nohup java -jar xxx.jar > catalina.out 2>&1 &命令详解:
nohup:不挂断地运⾏命令,退出帐户之后继续运⾏相应的进程。
nohup java -jar xxx.jar >⽇志⽂件名.log:是nohup把command的输出重定向到当前⽬录的指定的“⽇志⽂件名.log”⽂件中,即输出内容不打印到屏幕上,
⽽是输出到”⽇志⽂件名.log”⽂件中。不指定⽂件名会在当前⽬录创建nohup.out,如果当前⽬录的 nohup.out ⽂件不可写,输出重定向到 $HOME/nohup.out ⽂件中。如果没有⽂件能创建或打开以⽤于追加,那么 Command 参数指定的命令不可调⽤。
2>&1:2就是标准错误,1是标准输出,该命令相当于把标准错误重定向到标准输出么。这⾥&相当于标准错误等效于标准输出,
即把标准错误和标准输出同时输出到指定的“⽇志⽂件名.log”⽂件中。
java -jar ⾃⼰的springboot项⽬.jar:执⾏springboot的项⽬,如果单单只执⾏该命令,linux只会短暂的运⾏该项⽬,当退出控制台后会⾃动关闭该项⽬。最后的&:让该作业在后台运⾏。
当我们需要停⽌运⾏的时候 每次都要通过 jps命令查找当前服务进程号这样⼀次两次还能接受 频繁的话,就不太友好了
⾃定义脚本⽂件wss.sh
#!/bin/bash
#这⾥可替换为你⾃⼰的执⾏程序,其他代码⽆需更改APP_NAME=xxx.jar #你的jar包
#使⽤说明,⽤来提⽰输⼊参数usage() {
echo \"Usage: sh wss.sh [start|stop|restart|status]\"exit 1}
#检查程序是否在运⾏is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `#如果不存在返回1,存在返回0if [ -z \"${pid}\" ]; thenreturn 1elsereturn 0fi}
#启动⽅法start(){is_exist
if [ $? -eq \"0\" ]; then
echo \"${APP_NAME} is already running. pid=${pid} .\"else
nohup java -jar $APP_NAME > catalina.out 2>&1 &echo \"${APP_NAME} start success\"fi}
#停⽌⽅法stop(){is_exist
if [ $? -eq \"0\" ]; thenkill -9 $pid
else
echo \"${APP_NAME} is not running\"fi}
#输出运⾏状态status(){is_exist
if [ $? -eq \"0\" ]; then
echo \"${APP_NAME} is running. Pid is ${pid}\"else
echo \"${APP_NAME} is NOT running.\"fi}#重启restart(){stopstart}
#根据输⼊参数,选择执⾏对应⽅法,不输⼊则执⾏使⽤说明case \"$1\" in\"start\")start;;
\"stop\")stop;;
\"status\")status;;
\"restart\")restart;;*)usage;;esac
进⼊到⽬录使⽤ sh wss.sh start 启动sh wss.sh stop 停⽌
因篇幅问题不能全部显示,请点此查看更多更全内容