参考博客 :SpringBoot项目的云服务器部署 - CSDN博客 http://blog.csdn.net/zhangxing52077/article/details/73008359
在部署时候会碰到一些问题,比如不知道jdk的安装路径在哪,此时我们可以利用命令查出,
- 如果配置了 JAVA_HOME环境变量
echo $JAVA_HOME
- 如果没有就使用
[root@VM_0_15_centos ~]# which java
/usr/bin/java
[root@VM_0_15_centos ~]#
我的jdk安装在 /usr/java
所以将项目打jar包之后要放到 这个目录下,然后执行命令
[root@VM_0_15_centos java]# nohup java -jar test01.jar >/dev/null 2>&1 &
[2] 17732
[root@VM_0_15_centos java]#
原来运行的命令是
[root@VM_0_15_centos java]# nohup java -jar test01.jar &
[1] 2480
[root@VM_0_15_centos java]# nohup: ignoring input and appending output to ‘nohup.out’
[1]+ Exit 1 nohup java -jar test01.jar
当我们访问的时候会无法得到相应的结果,将命令改成 下面的才行
nohup java -jar test01.jar >/dev/null 2>&1 &
浏览器访问 http://ip/hello 得到 hello world!
原因为:
使用Linux重定向解决nohup.out无写权限问题
■场景
执行nohup命令的时候,经常会出现下面这种没有写入权限的错误。
nohup: ignoring input and appending output to nohup.out'
/etc/nginx_check.sh’: Permission denied
nohup: failed to run command
■linux重定向:
0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出。
在一般使用时,默认的是标准输出,既1。当我们需要特殊用途时,可以使用其他标号。
例如,将某个程序的错误信息输出到log文件中:./program 2>log。这样标准输出还是在屏幕上,但是错误信息会输出到log文件中。
另外,也可以实现0,1,2之间的重定向。2>&1:将错误信息重定向到标准输出。
Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。
这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。
如果想要正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null, 例如:
# ls 1>/dev/null 2>/dev/null
还有一种做法是将错误重定向到标准输出,然后再重定向到 /dev/null,例如:
# ls >/dev/null 2>&1
注意:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出,
由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于是一切静悄悄。
■关于nohup
在使用nohup命令的时候,经常由于输出nohup.out的路径没有写入权限,而无法使用nohup。
这是可以使用Linux重定向的方法,将nohup.out重定向至一个有写入权限的路径,或者直接扔到/dev/null中。
nohup ./program >/dev/null 2>/dev/null &
或者
nohup ./program >/dev/null 2>&1 &
上述程序代码很简单: 使用springboot框架
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test01</groupId>
<artifactId>test01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>test01</name>
<description>crm for erchuang</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties
# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=80
server.session-timeout=1800
HelloController.java
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* Date: 2018/3/12
* To change this template use File | Settings | File Templates.
* Description:测试的控制器
*/
@RestController
public class HelloController {
@RequestMapping(value="hello",method= RequestMethod.GET)
public String say(){
return "hello world!";
}
}
补充,如果jar项目更新,传上了新的版本,需要停掉原先的进程,
[root@VM_0_15_centos java]# ps -ef|grep test01
root 15706 1 0 16:20 ? 00:00:10 java -jar test01.jar
root 32630 30852 0 17:54 pts/0 00:00:00 grep --color=auto test01
[root@VM_0_15_centos java]# kill 15706
[root@VM_0_15_centos java]# ps -ef|grep test01
root 1137 30852 0 17:56 pts/0 00:00:00 grep --color=auto test01
然后重新挂起
[root@VM_0_15_centos java]# nohup java -jar test01.jar >/dev/null 2>&1 &
[2] 17732
[root@VM_0_15_centos java]#