发布Linux说明(Java代码&部署)

文件里面有该文档的压缩包,可下载下来查看

一、 概要说明

我们的Java程序一般在Windows进行编写,但是真正运行一般是运行于Linux服务器(虽然Java是跨平台的)。JavaEE一般运行于Tomcat下面,而对于我们写的控制台应用程序或是服务就需要单独运行了。

我们可以通过Eclipse导出一个jar文件包,在Windows还是Linux都可以通过命令java –jar xxx.jar直接运行,能够看到运行效果。

二、 Eclipse导出jar文件

1、编写代码

首先创建一个Java Project

如果要导出可执行的jar文件,那么我们的Java程序必须要有一个主方法,格式如下:

  

有了主方法,程序的相关逻辑代码都放置于主方法之内即可。

 

2、导出jar(传统方式)

选中需要导出的项目,右键→Export→Runnable JAR file

 

点击“Next”

 

按标识选择后点击“Finish”即可。

3、导出jar(Maven方式)

通过传统方式导出的jar包和第三方包是独立存在的,统一放到指定目录即可。我们也可以通过Maven方式导出jar包,导出的jar包和第三方包都统一在一个jar包里面。

1、修改pom.xml

如果我们不修改pom.xml而直接打包,那么打的包里面就没有第三方jar包,这时候执行就会出错,如下:

 

 为了避免这个问题,我们需要修改pom.xml如下

<build>
    <finalName>ser_json</finalName>
    <plugins>
        <!-- 这个插件是解决jdk1.8的问题,和该问题没直接关系-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

        <!-- 这个插件才是我们需要配置的重点-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId><!-- 注意插件名-->
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>cn.zdsoft.App</mainClass><!-- 这里配置主方法的类全路径-->
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

 

如果项目报错,请选择项目并单击鼠标右键→Maven→Update Project…

2、执行打包命令

找到需要打包的项目并单击鼠标右键→Run As→Maven Build…,出现如下界面:

 

输入打包命令“pakage”之后点击”run”。然后看控制台打印出如下内容:

 

表示打包成功,那么我们就可以将项目目录下target目录下的jar包拷贝执行了,此时执行正常

 

4、运行jar文件

 导出成功之后目录结构如下:

 

请不要破环目录结构,直接通过命令 java –jar write_file.jar即可执行该程序

三、  以服务的形式运行

对于C#来说,我们可以创建Windows服务,而Java中可以通过创建控制台应用程序,然后通过nohup的方式在后台运行,也相当于是一个服务。下面对该内容进行说明。

1、程序停止事件

我们以服务的方式运行时,当程序停止时往往会处理很多的业务,因此我们需要注册监听程序停止事件,这样才能保证程序的正确运行而不丢失数据等。首先需要对Java代码的主方法进行修改。修改后的代码如下:

 

2、以nohup方式运行

然后我们将导出的jar包和第三方jar包复制到Linux系统中,存放于/usr/local/write_file。首先以普通方式运行,结果如下:

 

通过ctrl+c可以结束程序,同时结束事件也能正常捕获到停止事件

 

以nohup方式运行,程序将不会在控制台输出,同时将会在jar包统计目录创建一个文件“nohup.out”,输出的内容全部自动存放于该文件中。

命令:nohup java -jar write_file.jar &

3、结束服务

通过普通方式运行可以用ctrl+c的方式结束运行,而通过nohup方式运行则需要两步,第一步查找当前服务的进程编码,第二步结束进程编码。

查找进程编码:ps -ef|grep write_file.jar

结束编码:kill xxxx

 

 重点说明:

结束服务时非特殊情况不可使用 kill -9 xxxx。因为这种方式相当于Windows的结束进程,那么我们程序无法监听到停止事件,除非程序异常而无法正常停止时使用。

正常情况请使用kill xxxx。

 

四、  守护程序Supervisor

jar文件运行之后难免会存在异常关闭的情况,为了让程序能在异常关闭后自动启动并继续运行,因此我们需要部署一套进程守护系统,经过多方面对比决定使用Supervisor进行线程守护。本来Supervisor的官网有详细介绍(听说),但是打不开,官网地址:http://supervisord.org/

同时本人学习的过程参照了http://www.cnblogs.com/Hai--D/p/5820718.html。在此表示感谢。

1、安装

安装的方式比较简单,就两个命令如下:

1、yum install python-setuptools

2、easy_install supervisor

2、配置

         1、创建目录:/etc/supervisor

         2、执行命令echo_supervisord_conf > /etc/supervisor/supervisord.conf 将会自动在目录/etc/supervisor下创建配置文件supervisord.conf,同时配置文件的内容也已初始化

         3、打开配置文件supervisord.conf,把最后两行的内容修改如下:

        [include]

files = conf.d/*.conf

       4、创建目录/etc/supervisor/conf.d,同时在该目录下创建文件ProjectName.conf(ProjectName代表需要监控的项目名称)

       5、打开ProjectName.conf,然后添加内容如下(注意分号后面是注释,可省略):  

[program: ProjectName]
command=nohup java -jar ProjectName.jar &; 运行程序的命令
directory=/root/Publishing/PublishOutput/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
autostart=true ; 是否自动启动
stderr_logfile=/var/log/ProjectName.err.log ; 错误日志文件
stdout_logfile=/var/log/ProjectName.out.log ; 输出日志文件
;environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT
startsecs=1 ; 自动重启间隔

         6、启动

supervisord -c /etc/supervisor/supervisord.conf

         7、查看运行状态

ps -ef | grep ProjectName

如下,表示成功

  

如果在执行supervisord命令时出现如下错误:

Error: Another program is already listening on a port that one of our HTTP servers is configured to use. 

Shut this program down first before starting supervisord.

For help, use /usr/bin/supervisord –h

则表示Supervisor已经启动,可以通过命令supervisorctl shutdown终止它。

3、开机启动

1、在目录/usr/lib/systemd/system/下创建文件supervisord.service

supervisord.service文件内容如下:

[Unit]
Description=Supervisor daemon 

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s 

[Install]
WantedBy=multi-user.target

 

2、执行命令,启动开机启动服务

systemctl enable supervisord

提示

Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.

 

3、验证是否为开机启动

systemctl is-enabled supervisord

提示enabled表示成功

 

4、命令汇总

4.1 启动Supervisor

supervisord -c /etc/supervisor/supervisord.conf

 

4.2 停止Supervisor

supervisorctl shutdown

 

4.3 查看所有任务状态

supervisorctl status

 

4.4 关闭所有任务

supervisorctl shutdown

 

4.5启动或停止服务

supervisorctl stop|start program_name

 

五、附件

 

posted @ 2017-07-07 14:20  段江涛IT  阅读(1594)  评论(0编辑  收藏  举报
页脚HTML代码