java - Centos java定制服务

标签 java service centos

我有一个 script.sh,它设置一些环境变量并启动 java 服务器。

#!/bin/bash

export JAVA_HOME="/opt/java"
export ....

nohup $JAVA_HOME/bin/java "$MEMORY_JAVA_OPS" -classpath "$MY_CLASSPATH" $MAIN_CLASS  &

我想在服务中转换此脚本(现在由/etc/rc.d/rc.local 启动)。

我尝试了许多在网上和 StackOverflow 上找到的示例。 我使用许多在线找到的模板创建了 myservice.service 文件...没有人工作!

一个例子是:

[Unit]
Description=MyService Java Process Restart Upstart Script
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
User=root
TimeoutStartSec=0
Type=simple
KillMode=process
#export JAVA_HOME=/opt/java/jdk-9
#export PATH=$PATH:$JAVA_HOME/bin
WorkingDirectory=/tmp/myworkdir
ExecStart=/path/to/myscript.sh

[Install]
WantedBy=multi-user.target

使用某些配置,服务会启动,但状态命令显示它已死亡(尽管它实际上正在运行)。对于其他人来说,它不会开始。如果没有,它会通过命令 stop ....

我尝试了Type=Simple、fork、oneshot...总是出现一些问题。

我只是想在启动后或当用户启动 systemctl start myservice 时,服务启动,如果一段时间后崩溃将再次启动。如果我运行 systemclt stop myservice 它就会停止并且不需要终止该进程。

最佳答案

首先需要说明的是,“服务”这个概念在Linux/Unix和Windows环境下有很大的不同。从你的问题看来,你正在寻找 Unix 解决方案。

在 unix 中,您通常会注册一些 statup 和 stop 脚本/命令。启动脚本只是通过 java -jar app.jar 运行您的 java 应用程序。该应用程序执行业务逻辑并打开对某些 SHUTDOWN 端口的监听。

停止脚本/命令只是调用另一个(或具有不同cmd参数的相同)java应用程序,该应用程序不执行任何其他操作,只是将STOP命令发送到原始应用程序的SHUTDOWN端口。

您可以更详细地查看例如 tomcat 启动/停止脚本 - 他们正是这样做的。

对于 Windows,最好使用一些包装器,例如 WinRun4J 或其他任何包装器。当然,您可以像我们一样为“通用多平台”服务拥有一个多平台 Maven 原型(prototype)。

编辑: 如果您仍然不确定如何在 Linux 上配置它,请阅读 https://linuxconfig.org/how-to-create-systemd-service-unit-in-linux

ExecStart 将是启动命令 java -jar app.jar,ExecStop 将是停止命令 java -jar app-stopper.jar

关于java - Centos java定制服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56989598/

相关文章:

java - 是否有一种 Java 数据结构可以返回对象集合中的一组特定属性?

c# - 错误 : No credentials found by which to authorize the user Missing authentication credentials

linux - Cent OS 7中如何根据修改时间对目录中具有特定扩展名的所有文件进行排序?

Android SIM卡更改

swift - 是否可以在 SwiftUI 中提供服务并将数据推送到 View 并更新 UI?

php - 想要为 WordPress 设置 cron 作业(Backwpup 插件)

shell - crontab 只执行第一行

java - 多线程 Socket 通讯 Client/Server

java - JMenuBar 不显示右侧菜单选项

java - hibernate 中的条件连接获取