一、启动jar包
nohup java -jar demo-0.0.1-SNAPSHOT.jar > spring.log 2>&1&
上述命令会使jar包在后台运行,用户退出也不会终止程序。
其中:末尾的&,使用指定后台运行nohup命令表示,系统后台不挂断地运行命令,退出终端不会影响程序的运行。不加这个命令,即使使用&,在退出远程连接后还是终止程序。
jar包后面>spring.log,是nohup的相关命令,表示将原本会打印在控制台的文件打印到spring.log里。该文件如果未指定路径,会在当前目录生成。
2>&1,同样是nohup相关,表示将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。如果不加这一命令会生成提示:nohup: ignoring input and redirecting stderr to stdout
注意:>意思是创建,>>是追加。
二、查看日志
1.实时查看日志
tail命令 用于显示文本文件的末尾内容(默认10行,相当于增加参数 -n 10),并且实时不断有内容被打印出来,若想中断进程,使用命令 Ctrl-C(比较吃内存)
参数:
tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
参数解释:
-f 该参数用于监视File文件增长。
-c Number 从 Number 字节位置读取指定文件
-n Number 从 Number 行位置读取指定文件。
-m Number 从 Number 多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致
截断,但使用-m则会避免该问题。
-b Number 从 Number 表示的512字节块位置读取指定文件。
-k Number 从 Number 表示的1KB块位置读取指定文件。
File 指定操作的目标文件名称
上述命令中,都涉及到number,假设不指定,默认显示10行。Number前面可使用正负号,表示该偏移从顶部还是从尾
部开始计算。
tail 可运行文件一般在/usr/bin/以下。
tail -f XXX.log 监视XXX.log文件的尾部内容(默认10行,相当于增加参数 -n 10)
tail -100f XXX.log 监视XXX.log文件的尾部内容(默认从底部往前100行,相当于增加参数 -n 100)
tail -n 20 XXX.log 显示XXX.log最后20行
tail -r -n 10 XXX.log 逆序显示XXX.log最后10行
2.搜索关键字附近的日志
cat -n XXX.log |grep “关键字”
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
-E --show-ends 在每行结束处显示 $
-e --等价于-vE
常用的命令
cat XXX.log | grep -C 5 '关键字' (显示日志里匹配字串那行以及前后5行)
cat XXX.log | grep -B 5 '关键字' (显示匹配字串及前5行)
cat XXX.log | grep -A 5 '关键字' (显示匹配字串及后5行)
三、停止jar包
1 根据端口号获取进程编号PID
netstat -lnp|grep 端口号
2.根据jar包名称获取进程编号PID
ps aux|grep jar包名称
3. 根据PID杀死进程
kill -9 PID
四、在linux中发布jar包.sh脚本
1.脚本
可直接复制后放入linux中 后缀改成 .sh 。执行方法有两种
1、直接./加上文件名.sh,如运行hello.sh为./hello.sh【hello.sh必须有x权限】
2、直接sh 加上文件名.sh,如运行hello.sh为sh hello.sh【hello.sh可以没有x权限】
#!/bin/bash
#这里可替换为你自己的jar包名称,其他代码无需更改
APP_NAME=XXXXX.jar
#使用说明,用来提示用户输入参数
usage() {
echo "Usage: sh start.sh [启动:start|停止:stop|重启:restart|状态:status]"
exit 1
}
#检查程序是否在运行
is_exist() {
pid=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start() {
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar $APP_NAME > ./journal.log 2>&1 &
fi
}
#停止方法
stop() {
is_exist
if [ $? -eq "0" ]; then
kill -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() {
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
2.如果复制移动到linux中执行后报错:Command not found 从两方面解决
1、是Windows和Linux的.sh脚本文件格式不同windows 下的换行符是\r\n,而 linux 下的换行符是\n,没有识别/r,这个属于脚本编码的问题,如果在脚本中有空行,并且是在Windows下进行编辑之后上传到linux上去执行的话,就会出现这个问题。
在start.sh对应脚本目录下,执行以下命令即可。
vim start.sh -- 根据提示选择首字母进入文件编辑状态(键盘E)
:set ff=unix --直接输入:冒号后,命令行会自动跳至最后一行进行编辑
:wq --保存文件并退出,w写入q退出
2.确保用户对文件有读写及执行权限(如果此时的权限是 dr,没有x,就说明没有执行的权限)
chmod a+x *.sh -- 同样在start.sh对应脚本目录下,执行以下命令即可