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

linux创建服务,实现程序异常退出自启

 以启动java程序进行示例,其他程序也可按照该方式进行配置

[Unit]
Description=My Java Service
After=network.target

[Service]
WorkingDirectory=/opt/myapp   # 设置你的 jar 文件所在目录
ExecStart=/usr/bin/java -jar myapp.jar  # 替换为你的 jar 启动命令
Restart=always
RestartSec=5
User=your_user  # 可选,指定运行服务的用户
Environment=JAVA_OPTS="-Xms512m -Xmx1024m"  # 可选,设置 JVM 参数
Environment=SPRING_PROFILES_ACTIVE=prod  # 可选,设置环境变量

[Install]
WantedBy=multi-user.target

字段说明

  1. WorkingDirectory

    • 设置你的 jar 文件所在目录。
    • 在启动服务时,会将此目录作为工作目录。
    • 替换为实际目录,例如 /opt/myapp
  2. ExecStart

    • 指定服务的启动命令。
    • 示例中使用 /usr/bin/java -jar myapp.jar
    • 替换 myapp.jar 为你的实际 jar 文件名称。
  3. RestartRestartSec

    • Restart=always:如果服务退出,无论是否发生错误,都会重启服务。
    • RestartSec=5:重启前的等待时间。
  4. User

    • 可选:指定运行服务的用户。
    • 如果 jar 程序不需要以 root 身份运行,建议指定一个非特权用户(例如 your_user)。
  5. Environment

    • 可选:设置环境变量,例如 JVM 参数或 Spring 环境。
    • 如果需要添加 JVM 参数(如内存设置),可以通过 Environment 配置。
  6. WantedBy

    • multi-user.target 表示该服务适用于多用户命令行模式(通常是默认运行级别)。

配置步骤

  1. 保存单元文件
    将上述内容保存为 /etc/systemd/system/my-java-service.service。(my-java-service可根据自己需求自定义名称)

  2. 重新加载 systemd 配置

    sudo systemctl daemon-reload

  3. 启动服务

    sudo systemctl start my-java-service

  4. 设置服务开机自启

    sudo systemctl enable my-java-service

  5. 检查服务状态
    查看服务运行状态:

    sudo systemctl status my-java-service

  6. 查看服务日志
    如果启动时出现问题,可以通过以下命令查看日志:

    journalctl -u my-java-service

示例

    假设:

  • jar 文件路径为 /opt/myapp/myapp.jar
  • 使用非特权用户 appuser 运行服务。
  • JVM 内存参数设置为 -Xms512m -Xmx1024m
  • Spring 配置文件为 prod 环境。
[Unit]
Description=My Java Application
After=network.target

[Service]
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar myapp.jar
Restart=always
RestartSec=5
User=appuser
Environment=JAVA_OPTS="-Xms512m -Xmx1024m"
Environment=SPRING_PROFILES_ACTIVE=prod

[Install]
WantedBy=multi-user.target


http://www.kler.cn/a/488908.html

相关文章:

  • 关于地平线开发板使用nhwc格式的前向传播输出格式的理解
  • 易于上手难于精通---关于游戏性的一点思考
  • 2025新年源码免费送
  • MATLAB算法实战应用案例精讲-【数模应用】图像边缘检测(附MATLAB和python代码实现)(二)
  • mapbox基础,style样式汇总,持续更新
  • leetcode 面试经典 150 题:两数之和
  • npm发布流程说明
  • 创建和管理表
  • Vue3的reactive、ref、toRefs、toRef、toRaw 和 markRaw处理响应式数据区别
  • 科技盛宴CES Asia 2025,企业创新活力尽显
  • uniapp路由跳转+二级页面详情跳转保留当前页方法教程
  • Win11远程桌面怎么设置?
  • CAS操作的底层原理(总线锁定机制和缓存锁定机制 )
  • SpringBoot 原理篇(day14)
  • 【python自写包模块的标准化方法】
  • 「sql之窗口函数」
  • MongoDB中的索引是提高查询效率的重要工具
  • win32汇编环境,窗口程序中对按钮控件常用操作的示例
  • Redis:持久化机制
  • Golang 并发之 Goroutine
  • Django管理后台实现ECS服务管理:权限控制与重启功能
  • (vue)el-table-column type=“selection“表格选框怎么根据条件添加禁选
  • 【PyCharm】PyCharm CE免费版下载
  • ubuntu22.04 gcc,g++从10.5切换到低版本9.5
  • openwrt 常见编译问题及编译提速
  • 多台PC共用同一套鼠标键盘