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
字段说明
-
WorkingDirectory
- 设置你的
jar
文件所在目录。 - 在启动服务时,会将此目录作为工作目录。
- 替换为实际目录,例如
/opt/myapp
。
- 设置你的
-
ExecStart
- 指定服务的启动命令。
- 示例中使用
/usr/bin/java -jar myapp.jar
。 - 替换
myapp.jar
为你的实际jar
文件名称。
-
Restart
和RestartSec
Restart=always
:如果服务退出,无论是否发生错误,都会重启服务。RestartSec=5
:重启前的等待时间。
-
User
- 可选:指定运行服务的用户。
- 如果
jar
程序不需要以root
身份运行,建议指定一个非特权用户(例如your_user
)。
-
Environment
- 可选:设置环境变量,例如 JVM 参数或 Spring 环境。
- 如果需要添加 JVM 参数(如内存设置),可以通过
Environment
配置。
-
WantedBy
multi-user.target
表示该服务适用于多用户命令行模式(通常是默认运行级别)。
配置步骤
-
保存单元文件
将上述内容保存为/etc/systemd/system/my-java-service.service
。(my-java-service可根据自己需求自定义名称
) -
重新加载
systemd
配置sudo systemctl daemon-reload
-
启动服务
sudo systemctl start my-java-service
-
设置服务开机自启
sudo systemctl enable my-java-service
-
检查服务状态
查看服务运行状态:sudo systemctl status my-java-service
-
查看服务日志
如果启动时出现问题,可以通过以下命令查看日志: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