使用 Java Service Wrapper 将 java 程序作为 linux 服务并且开机自动启动
安装及使用 java wrapper service
一.从http://wrapper.tanukisoftware.org/doc/english/download.jsp
下载 wrapper-linux-x86-64-3.5.45.tar(请使用Community版本,因Professional和Standard版本需要购买Licenses);
下载是个 压缩包 wrapper-linux-x86-64-3.5.45.tar.gz
二、解压缩后 如图:
三、在windows上 创建一个名为 app 目录 ,在这个目录下 再建 bin,conf,lib,logs 四个目录
四、复制文件 至 app 目录下
1. 拷贝 wrapper-linux-x86-64-3.5.45\bin\wrapper(为二进制文件) 到 app\bin\ 目录下
2.拷贝 wrapper-linux-x86-64-3.5.45\src\bin\sh.script.in 到 app\bin\ 目录下 并改名为 app.sh (注:将 .in 去掉 )
将自己编写的 java程序用到的配置文件都拷贝到该目录下 包括.ini,.xml;
3.拷贝 wrapper-linux-x86-64-3.5.45\src\conf\wrapper.conf.in 到 app\conf\目录下 并改名为wrapper.conf (注:将 .in 去掉 )
4.拷贝 wrapper-linux-x86-64-3.5.45\lib\wrapper.jar,libwrapper.so 到 app\lib\目录下
将自己编写的 java程序,及用到的jar包也拷贝到该目录下
如图 app目录
app\bin 目录
app/conf 目录
app/lib 目录 SinaServer.jar 是自己编写的java程序,其它四个.jar是从 wrapper压缩包中复制过来的。
app/logs 目录 这个目录运行前是空的 wrapper.log 是 wrapper 自动创建的日志
五. 配置 app.sh , 设置应用程序的名称等(编辑时请使用NotePad2或EditPlus) 打开app.sh搜索 APP_NAME=
# Application
APP_NAME="MailSender"
APP_LONG_NAME="MailSender Application"
六. 配置 wrapper.conf
# Java Application
# Locate the java binary on the system PATH:
#wrapper.java.command=java
# Specify a specific java binary:
#set.JAVA_HOME=/java/path
wrapper.java.command=%JAVA_HOME%/bin/java
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized. Helper
# classes are provided to do this for you. See the Integration section
# of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp #默认使用
# Java Classpath (include wrapper.jar) Add class path elements as
# needed starting from 1
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../lib/classes12.jar #其它引入jar
wrapper.java.classpath.3=../lib/activation.jar #其它引入jar
wrapper.java.classpath.4=../lib/mail.jar #其它引入jar
wrapper.java.classpath.5=../lib/App.jar #当前应用jar
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=../lib #Windows 版本使用Wrapper.DLL,Linux版本使用libwrapper.so
# Application parameters. Add parameters as needed starting from 1
wrapper.app.parameter.1=com.wisdom.mail.Main #app应用启动类
#********************************************************************
# Wrapper Windows Properties
#********************************************************************
# Title to use when running as a console
wrapper.console.title=AppName Application
我用的是 %JAVA_HOME%/bin/java 环境变量
没变,使用默认
SinaServer.jar为自己编写的程序
没变,使用默认
在IDEA中
七、将 app目录(包括目录下所有文件) 上传 到 linux 服务器的 /usr/local 下
八、分别执行 下面命令 目的:赋于 权限
chmod 755 /usr/local/app
cd /usr/local/app/bin
sudo chmod 755 app.sh
sudo chmod 755 wrapper
注:sudo chmod 755 app.sh 这句 app.sh 一定要加 .sh
九、启动服务
如果要检查服务是否执行正常,可先使用console参数,如果正常就可以使用start来启动服务了。
先执行检查
/usr/local/app/bin/app.sh console
启动服务
/usr/local/app/bin/app.sh start
PID:2354 为程序运行的 ID
查看当前现在执行的 java 进程
ps -ef | grep java
下面是 app.sh 的参数
/usr/local/app/bin/app.sh [ console | start | stop | restart | condrestart | status | install | remove | dump ]
Commands:
console Launch in the current console.
start Start in the background as a daemon process.
stop Stop if running as a daemon or in another console.
restart Stop if running and then start.
condrestart Restart only if already running.
status Query the current status.
install Install to start automatically when system boots.
remove Uninstall.
dump Request a Java thread dump if running.
十、我在部署时,遇到的问题及解决方法
1.目录不对
linux的命令
cd .. 返回上一级目录 注意 cd 后面有个 空格
ls 查看目录下的所有文件
2.没有 赋于 权限
解决方法:重新 执行 第 八 步
3. app.sh 的执行 参数 不能 同时执行多个 ,应分开执行 如: /usr/local/app/bin/app.sh console
4. \bin\logs 目录没有 创建
5.自己编写的 Java程序 放错位置。 (注:Java程序所用到的 所有 .jar 也应放到这个目录下 )
应 放到 /app/lib/ 目录下
感谢:
zljjava
https://blog.csdn.net/zljjava/article/details/7894617
https://blog.csdn.net/zljjava/article/details/8279410
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2011-07-07 C++ 错误:const char [10]”转换为“const wchar_t