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&
查找进程
- 通过
jps -l
命令 - 通过
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
解决