文档章节

SpringBoot在linux后台运行方法,含源码

nonnetta
 nonnetta
发布于 2017/05/23 16:02
字数 932
阅读 438
收藏 3

1. 在linux服务器中,在程序结尾加入&符号,如下:

java -jar test.jar &

&符号,在linux系统中代表的是让这个进程到系统的后台中去执行,但是一旦这个进程有输出,你的控制台将会被当前输出的信息所占领。

 

2. 此时可以考虑通过linux提供的>指令,把标准输出重定向到指定文件中,在linux的>指令中默认定义了两个变量(1, 2), 1代表的是标准输出, 2代表的是错误输出,此时的指令也就演变成了如下:

java -jar test.jar 1> output_common_log_file_path 2> output_error_log_file_path &

由于默认采用的是标准输出,也等同于如下写法

java -jar test.jar > output_common_log_file_path 2> output_error_log_file_path &

 

3. 此时有可能只想部分输出,既可以采用设备/dev/null,来进行忽略输出。

3.1 忽略标准输出

java -jar test.jar 1> /dev/null 2> output_error_log_file_path &

3.2 忽略错误输出

java -jar test.jar 1> output_common_log_file_path 2> /dev/null &

3.2 忽略全部输出

java -jar test.jar 1> /dev/null 2> /dev/null &

 

4. 信息重定向,把所有的输出指定到同一个文件中

4.1 将2的输出也重定向到1

java -jar test.jar 1> output_common_log_file_path 2> &1 &

4.2 忽略全部输出

java -jar test.jar 1> /dev/null 2> &1 &

错误示范:虽然说可以重定向到同一个文件,但是不能直接输出到同一个文件,否则会冲突,如下

java -jar test.jar 1> output_log_file_path 2> output_log_file_path &

 

5. 每次运行命令,都会覆盖原文件,而不是追加,如果想进行追加的话,需要采用>>指令

java -jar test.jar 1>> output_common_log_file_path 2>> output_error_log_file_path &

 

6. 通过&符号启动的“后台”进程在shell一直打开的情况下是没有问题的,如果此时关了shell窗口,甚至是退出了ssh登录或vnc登录,进程也就自动结束了,此时就需要用到linux的nohup指令。

nohup java -jar test.jar 1> output_common_log_file_path 2> output_error_log_file_path &

 

7. 经过整理后得到的sh文件,当前不输出>日志。

#!/bin/sh
APP_DIR=/app/server/cuohe-admin
APP_FILE=yaycrawler-admin-1.0.0-SNAPSHOT.war
#APP_CONF=$APP_DIR/application.properties

#set java home
#export JAVA_HOME=/opt/jdk1.8.0_111
usage(){
    echo 'Usage: sh yaycrawler-admin-1.0.0-SNAPSHOT.sh [start|stop|deploy|check]'
    exit 1
}

kills(){
    tpid=`ps -ef|grep $APP_FILE|grep -v grep|grep -v kill|awk '{print $2}'`
    if [[ $tpid ]]; then
	echo 'Kill Process!'
	kill -9 $tpid
    fi
}

start(){
    rm -f $APP_DIR/tpid

    if [[ $APP_CONF ]]; then
        nohup java -jar $APP_DIR/"$APP_FILE" --spring.config.location="$APP_CONF" >> /dev/null 2>>&1 &
	echo 'starting...'
    else
	nohup java -jar $APP_DIR/"$APP_FILE" >> /dev/null 2>>&1 &
	echo 'starting...'
    fi

    echo $! > $APP_DIR/tpid
    echo 'Start Success!'
}

stop(){
    tpid1=`ps -ef|grep $APP_FILE|grep -v grep|grep -v kill|awk '{print $2}'`
    echo "tpid1-$tpid1"
    if [[ $tpid1 ]]; then
	echo 'Stop Process...'
	kill -15 $tpid1
    fi
    sleep 5
    tpid2=`ps -ef|grep $APP_FILE|grep -v grep|grep -v kill|awk '{print $2}'`
   
    if [[ $tpid2 ]]; then
        echo "tpid2-$tpid2"
	echo 'Kill Process!'
	kill -9 $tpid2
    else
	echo 'Stop Success!'
    fi
}

check(){
    tpid=`ps -ef|grep $APP_FILE|grep -v grep|grep -v kill|awk '{print $2}'`
    if [[ $tpid ]]; then
	echo 'App is running.'
    else
	echo 'App is NOT running.'
    fi
}

deploy(){
    kills
    rm -rf $APP_DIR/"$APP_FILE"
    cp "$APP_FILE" $APP_DIR
}

case "$1" in
    "start")
	start;;
    "stop")
	stop;;
    "kill")
	kills;;
    "deploy")
	deploy;;
    "check")
	check;;
    *)
	usage;;
esac

运行方式,./sh文件 [start|stop|deploy|check] 这四个指令。

如启动:./yaycrawler-admin-1.0.0-SNAPSHOT.sh start

 

8. 在运行sh文件可能遇到的几个问题

8.1 \302\240,command not found

一看到这个错,就知道你是在windows环境下编写的sh脚本,在vim环境下编辑当前的sh文件,如图找到第48行,把空格删除,并重新补入空格即可,原因是因为windows和linux的字符编码不一样导致的。

8.2 syntax error: unexpected end of file

这个错误跟上面的意思差不多,使用vim来进行编写,即可解决此问题。

© 著作权归作者所有

nonnetta
粉丝 7
博文 9
码字总数 8465
作品 0
厦门
高级程序员
私信 提问
玩转阿里云函数计算(三)——一键配置 SpringBoot 应用

前言 阿里云函数计算 Function Compute(FC),旨在帮助用户采用弹性伸缩、动态分配资源的方式,来执行业务函数。让用户无需购买部署服务器,无需考虑业务负载,就能快速搭建可处理高并发的后台...

santihyt
07/03
0
0
SpringBoot系列一:SpringBoot入门

原文出处:晴枫 1 SpringBoot HelloWorld 功能:浏览器发送 sayHello 请求,服务器接受请求并处理,响应 Hello。 1.1 创建一个maven工程 com.seagetechspringboot-helloworld1.0.0 1.2 下载官...

晴枫
2018/11/21
0
0
docker(三):使用maven 插件构建docker镜像

---layout: blogistop: truetitle: "使用maven 插件构建docker镜像"date: 2018-09-11category: dockertags: docker --- 介绍 作为一个java后端开发人员,docker如何与Maven 工程相结合是我们......

开心的哈士奇
2018/10/17
168
0
springboot情操陶冶-初识springboot

前言:springboot由于其轻便和去配置化等的特性已经被广泛应用,基于时代潮流以及不被鄙视,笔者于是开辟此篇开始认识springboot 前话 springboot是基于spring而开发的轻量级框架,所以在学习...

南柯问天
2018/07/24
0
0
springboot + shiro 权限注解、请求乱码解决、统一异常处理

springboot + shiro 权限注解、请求乱码解决、统一异常处理 前篇 后台权限管理系统 相关: spring boot + mybatis + layui + shiro后台权限管理系统 springboot + shiro之登录人数限制、登录...

wyait
2018/06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Rabbit MQ 延迟消息发送

为什么使用延迟消息? 不同于同步消息,有些业务场景下希望可以实现延迟一定时间再消费消息。 典型的场景有微信、支付宝等第三方支付回调接口,会在用户支付后3秒、5秒、30秒等等时间后向应用...

兜兜毛毛
6分钟前
0
0
【0918】正则介绍_grep

【0918】正则介绍_grep 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 一、正则介绍 正则是一串有规律的字符串,它使用单个字符串来描述或匹配一系列符合某个语法规则的字符串。 二、grep工具 ...

飞翔的竹蜻蜓
36分钟前
4
0
为什么要在网站中应用CDN加速?

1. 网页加载速度更快 在网站中使用CDN技术最直接的一个好处就是它可以加快网页的加载速度。首先,CDN加速的内容分发是基于服务器缓存的,由于CDN中缓存了不少数据,它能够给用户提供更快的页...

云漫网络Ruan
今天
8
0
亚玛芬体育(Amer Sports)和信必优正式启动合作开发Movesense创新

亚玛芬体育和信必优正式启动合作开发Movesense创新,作为亚玛芬体育的完美技术搭档,信必优利用Movesense传感器技术为第三方开发移动应用和服务。 Movesense基于传感器技术和开放的API,测量...

symbiochina88
今天
4
0
创龙TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA核心板规格书

SOM-TL437xF是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA芯片设计的核心板,采用沉金无铅工艺的10层板设计,适用于高速数据采集和处理系统、汽车导航、工业自动化等领...

Tronlong创龙
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部