Title

springboot项目部署

  • 杀死程序进程

ps

Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。

查找指定进程格式:

# ps -ef //显示所有命令,连带命令行

ps -ef | grep 进程关键字

# eg: ps -ef | grep java  //查询Java进程

杀死进程

kill -9 进程id
# eg: kill -9 25446 // 强制杀死进程id为25446的进程
  • 部署项目

nohup

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

语法格式:nohup Command [ Arg … ] [ & ]

参数说明:
Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
&:让命令在后台执行,终端退出后命令仍旧执行。

# 后台执行 java -jar命令,并重定向输入到 test.log 文件
nohup java -jar -Dspring.profiles.active=test /home/test-1.0.0.jar > /home/logs/test.log  2>&1 & 

2>&1 解释:

将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 test.log 文件中。

0 – stdin (standard input,标准输入)
1 – stdout (standard output,标准输出)
2 – stderr (standard error,标准错误输出)

windows 发布命令

# 后台执行 java -jar命令,并重定向输入到 test.log 文件
javaw -Dconfig=C:\path\to\your\config.properties -jar xxx.jar > D:/java/logs/test.log&

查找进程

  1. 通过 jps -l 命令
  2. 通过 netstat -ano | findstr 端口号 命令

通过端口找到 pid 信息

netstat -ano | findstr :8080

杀掉进程

taskkill /f /pid 14216

  • 查看日志

tail

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。

# 查看 test.log 
tail -f -n 1000 /home/test.log 

tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容,当内容打到限制大小时会创建新的,可能会导致查看卡死

解决:使用 tail -F 这个命令在查看失败后会自动重新读取

  • 问题:vue项目部署后图标不能正常显示

解决:在build目录下打包css样式js文件里添加 publicPath: '../../'

    // Extract CSS when that option is specified 指定该选项时提取 CSS
    // (which is the case during production build) 在生产构建期间就是这种情况
    if (options.extract) {
      return ExtractTextPlugin.extract({
        use: loaders,
        fallback: 'vue-style-loader',
        publicPath: '../../'

      })
    } else {
      return ['vue-style-loader'].concat(loaders)
    }
  }
  • 问题:部署jsp+servlet项目后访问不了

原因一:服务器的版本不一致

  • 使用外网的服务器上传文件到内网服务器

上传文件到内网服务器使用 scp 命令

# scp 文件名 root@内网地址:/复制到内网服务器路径
scp test.jar root@192.12.11.2:/home/test
#输入密码

连接内网的服务器使用 ssh 命令

# ssh 连接
ssh 192.12.11.2
# 输入密码
# 退出内网服务器 exit
  • 部署自动化脚本
#!/bin/bash
APP_DIR=/home/work
APP_NAME=my-project
#PROFILES_ACTIVE=$2
#iAPP_CONF=$APP_DIR/application.properties
APP_CONF=./config/application.yml
APP_CONF_TEST=./config/application-test.yml
APP_ACTIVE=test
#set java home
export JAVA_HOME=/home/java/jdk1.8.0_144


if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
    exit 1
fi

#if [ "$PROFILES_ACTIVE" = "" ];
#then
    #echo -e "\033[0;31m 未输入执行的环境 \033[0m \033[0;34m {dev|prod} \033[0m"
    #exit 1
#fi

function start()
{
    count=`ps -ef |grep java|grep $APP_NAME|grep -v grep|wc -l`
    if [ $count != 0 ];then
        echo "$APP_NAME is running..."
    else
        nohup java -Xms10m -Xmx200m -jar -Dspring.profiles.active="$APP_ACTIVE" -Dspring.config.location="$APP_CONF","$APP_CONF_TEST" "$APP_DIR"/"$APP_NAME".jar  > "$APP_DIR"/logs/"$APP_NAME".log 2>&1 &
        echo $! > ./tpid	# 本shell脚本中后台执行(使用了&的执行方式)的脚本pid	
    echo "Start $APP_NAME success..."
    fi
}

function stop()
{
    echo "Stop $APP_NAME"
    boot_id=`ps -ef |grep java|grep $APP_NAME|grep -v grep|awk '{print $2}'`
    count=`ps -ef |grep java|grep $APP_NAME|grep -v grep|wc -l`

    if [ $count != 0 ];then
        kill $boot_id
        count=`ps -ef |grep java|grep $APP_NAME|grep -v grep|wc -l`

        boot_id=`ps -ef |grep java|grep $APP_NAME|grep -v grep|awk '{print $2}'`
        kill -9 $boot_id
    fi
}

function restart()
{
    stop
    sleep 2
    start
}

function status()
{
    count=`ps -ef |grep java|grep $APP_NAME|grep -v grep|wc -l`
    if [ $count != 0 ];then
        echo "$APP_NAME is running..."
    else
        echo "$APP_NAME is not running..."
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    *)
esac

Shell脚本在Windows系统编写时,每行结尾是\r\n,而在Linux系统中行每行结尾是\n,所以在Linux系统中运行脚本时,会认为\r是一个字符,导致$‘\r‘: command not found运行错误,使用命令 sed -i 's/\r//' xxxxx.sh 解决

posted @ 2022-01-18 14:20  快乐小洋人  阅读(149)  评论(0编辑  收藏  举报