当前位置: 首页 > news >正文

服务器service托管java服务

为Java JAR包项目配置systemd服务(.service文件),可以实现项目的开机自启、后台运行、状态管理等功能,以下是详细步骤:

一、创建service配置文件

  1. 文件路径:在/etc/systemd/system/目录下创建服务文件,命名格式为[项目名].service(例如fws-billing.service)。

  2. 配置内容

[Unit]
Description=Java Application Service (Managed by start.sh)
After=network.target
# 若依赖数据库等服务,可添加:After=mysql.service redis.service[Service]
# 运行用户(根据实际情况修改,建议非root用户)
User=ops_app_user
Group=ops_app_user# 工作目录(脚本所在目录)
WorkingDirectory=/data/shell# 启动命令:调用start.sh,传递参数(根据实际需求修改参数值)
# 格式:/data/app/start.sh <jar_path> <jar_name> <max_memory>
ExecStart=/data/shell/start.sh ifahan  fws-billing  512# 停止命令:直接调用原有的shutdown.sh(假设其能正确终止进程)
ExecStop=/bin/bash -c "pid=\$(pgrep -f 'ifahan/server/fws-billing.jar'); if [ -n \"\$pid\" ]; then kill -15 \"\$pid\"; sleep 3; if ps -p \"\$pid\" > /dev/null; then kill -9 \"\$pid\"; fi; fi; exit 0;"Type=forking
# 让Java进程将PID写入文件(需在start.sh中配置)
PIDFile=ifahan/tmp/fws-billing.pid
# # 等待Java进程启动完成的超时时间
TimeoutStartSec=30# 重启策略:异常退出时自动重启
Restart=on-failure
RestartSec=10# 环境变量(继承脚本中的JAVA_HOME等配置,也可在此补充)
Environment="BUILD_ID=DONTKILLME"
Environment="TZ=Asia/Shanghai"# 日志输出(同时保留脚本自身的日志文件和systemd日志)
StandardOutput=journal
StandardError=journal[Install]
WantedBy=multi-user.target

启动脚本

#!/bin/bash
set -eBUILD_ID=DONTKILLME
export JAVA_HOME=/data/app/jdk1.8.0_171
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profileif [ $# -lt 2 ]; thenecho "Usage: $0 <jar_path> <jar_name> [min_memory] [max_memory]"exit 1
fijar_path=$1
jar_name=$2
min_memory=${3:-512}
max_memory=$4if [ -n "$max_memory" ] && [ "$max_memory" -lt "$min_memory" ]; thenecho "Error: max_memory cannot be less than min_memory"exit 1
fi# Shutdown existing instance
/data/shell/shutdown.sh "$jar_name"# Navigate to application directory
cd /data/app/# Start new instance
if [ -z "$max_memory" ]; thennohup java -Xms${min_memory}m -Duser.timezone=Asia/Shanghai  -jar "$jar_path/server/$jar_name.jar"  >> "$jar_path/$jar_name.log" 2>&1 &
elsenohup java -Xms${min_memory}m -Xmx${max_memory}m -Duser.timezone=Asia/Shanghai -jar "$jar_path/server/$jar_name.jar"  >> "$jar_path/$jar_name.log" 2>&1 &
fipid_file="ifahan/tmp/fws-billing.pid"
# 若目录不存在则创建
mkdir -p $(dirname "$pid_file")
# 写入PID
echo $! > "$pid_file"# Wait for the application to start
sleep 10echo "--------end $jar_name-------------"

关闭脚本

#!/bin/bashpid=`jps -l  | grep $1 | awk '{print $1}'`
if [[ -n $pid  ]]; thenecho "[$1] is running, killing................"kill -9 $pidsleep 1
elseecho "[$1] is not running..."
fi

二、配置参数说明

配置项作用说明
Description服务的描述信息,便于识别
After=network.target表示服务在网络服务启动后再启动,避免因网络未就绪导致启动失败
User/Group指定运行服务的用户/组,强烈建议非root用户,降低安全风险
WorkingDirectory服务的工作目录(JAR包所在路径),日志、临时文件等会默认生成在此目录
ExecStart启动命令,需指定完整的java路径(可通过which java查询)和JAR包路径,可添加JVM参数(如内存设置-Xms/-Xmx)、应用参数(如Spring profiles)
Restart=on-failure当服务异常退出(退出码非0)时自动重启,保障服务可用性
WantedBy=multi-user.target设置服务在多用户模式下开机自启

三、服务管理命令

  1. 重载配置:创建或修改.service文件后,需重载systemd配置:
sudo systemctl daemon-reload
sudo systemctl start fws-billing.service
sudo systemctl status fws-billing.service
  1. 启动服务
sudo systemctl start fws-billing.service
  1. 停止服务
sudo systemctl stop fws-billing.service
  1. 重启服务
sudo systemctl restart fws-billing.service
  1. 查看服务状态
sudo systemctl status fws-billing.service
# 输出示例:
# ● app-server.service - Java Application Service for MyApp
#    Loaded: loaded (/etc/systemd/system/app-server.service; enabled; vendor preset: disabled)
#    Active: active (running) since Wed 2025-08-13 10:00:00 CST; 5min ago
#  Main PID: 12345 (java)
#     Tasks: 30 (limit: 4915)
#    Memory: 512.0M
#    CGroup: /system.slice/app-server.service
#            └─12345 /usr/local/jdk1.8.0_301/bin/java -Xms512m -Xmx1024m -jar /home/app/app-current.jar
  1. 设置开机自启
sudo systemctl enable fws-billing.service
  1. 关闭开机自启
sudo systemctl disable fws-billing.service
  1. 查看服务日志(结合journalctl):
# 实时查看日志
sudo journalctl -u fws-billing.service -f
# 查看最近100行日志
sudo journalctl -u fws-billing.service -n 100
# 按时间筛选日志(例如2025-08-13 10:00到10:30)
sudo journalctl -u fws-billing.service --since "2025-08-13 10:00" --until "2025-08-13 10:30"

四. 测试

将进程kill 服务会在10秒后重启

http://www.dtcms.com/a/327140.html

相关文章:

  • 【无标题】centos 配置阿里云的yum源
  • 如何区分类的关系是关联和聚合?
  • 【数据结构】二叉树经典OJ题与OJ题解析
  • 【传奇开心果系列】Flet框架实现的多人访问web数据表高并发前后端自定义框架模板
  • iPhone 17 Pro 为何被指像充电宝?
  • 【2025最新版】视频转换软件VideoProc Converter Al 便携版 功能强大的视频转换工具 百度网盘
  • iPad 引导式访问(Guided Access)完整指南
  • 26 届秋招建议指南
  • Web 安全之互联网暴露面管理
  • python调研本地 DeepSeek API的例子
  • Java 22 新特性:字符串模板(String Templates)让拼接更优雅、更安全
  • iOS混淆工具有哪些?团队协作视角下的分工与防护方案
  • 飞算JavaAI 2.0.0深度测评:自然语言编程如何重塑Java开发范式
  • 给商品换背景--指令改图,主图场景随心换
  • 【Allegro SKILL代码解析】添加Pin Number
  • NetworkManager配置热点
  • Springboot注册过滤器的三种方式(Order 排序)
  • 如何用codeBuddy20分钟处理一单数据分析
  • 10. React组件间的通信
  • MySQL——MySQL引擎层BufferPool工作过程原理
  • K8s 1.32.6版本部署文档
  • Ansible 基础到实操笔记
  • 【Redis在数据治理与数据隐私保护策略中的优化】
  • 新手向:Python编写简易翻译工具
  • 移动端调用大模型详解
  • 【运维进阶】Ansible 自动化
  • 西门子 S7-200 与 S7-1200 借 PPI 以太网模块通讯,赋能食品行业进步
  • 【pxe】通过pxe批量安装centos系统(传统Legacy启动+uefi启动)
  • Neo4j Cypher语句
  • 淘宝API列表:高效获取商品详情图主图商品视频参数item_get