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

在Linux中如何编写*.service文件?

概述

  1. 背景说明:常用的开启自启动除了通过rc.local的方式,还可以通过*.service的方式达到我们想要的效果。
  2. 问题阐述:如何通过*.service的方式达到开机自启的效果?

具体实现

1. .service文件位置

  • 系统级服务:/etc/systemd/system
  • 软件包自带服务:/usr/lib/systemd/system

2. 基本文件结构

[Unit]
Description=服务描述
After=依赖的其他服务.taget[Service]
Type=服务类型
ExecStart=启动命令
User=运行用户
Restart=重启策略[Install]
WanteBy=目标.target
[Unit]部分[Service]部分[Install]部分
Description:服务器描述(必填)Type(必填):
1. simple:默认类型,主进程由systemd启动。
2. foking:后台守护进程(指定PIDFile=)。
3. oneshot:单次执行(如初始化脚本)。
4. ontify:服务就绪后发送通知。
WantedBy:指定服务所属Target(如multi-user.taget
After:定义启动顺序(如network.targetUser/Group:运行身份(避免使用root!)
Requires:强依赖服务(依赖失败则本服务失败)ExecStart(必填):
绝对路径启动命令(如/usr/bin/python3 /app/main.py
Wants:弱依赖服务(依赖失败不影响本服务)ExecStop:自定义停止命令
Restart:
1. on-failure:非正常退出时重启。
2. always:总是重启。
3. no:不重启
RestartSec:重启等待时间(如5S
Environment:环境变量(如Environment="PORT=8080"
WorkingDirectory:工作目录路径

3. 案例

[Unit]
Description=My Python Web App
After=network.target postgresql.service[Service]
Type=simple
User=appuser
Group=appgroup
WorkingDirectory=/opt/myapp
Environment="DB_HOST=localhost"
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=on-failure
RestartSec=10
StandardOutput=syslog
StandardError=syslog[Install]
WantedBy=multi-user.target

4. 启动服务

# 1. 创建服务文件
sudo nano /etc/systemd/system/myapp.service# 2. 重载systemd配置
sudo systemctl daemon-reload# 3. 启动服务
sudo systemctl start myapp# 4. 设置开机自启
sudo systemctl enable myapp# 5. 检查状态
sudo systemctl status myapp

5. 调试技巧

  • 日志查看:
journalctl -u myapp.service -f  # 实时日志
  • 验证文件语法:
systemd-analyze verify /etc/systemd/system/myapp.service
http://www.lqws.cn/news/467569.html

相关文章:

  • 【单调栈】-----【Largest Rectangle in a Histogram】
  • emscripten 编译 wasm 版本的 openssl
  • 蚂蚁百宝箱快速创建智能体AI小程序
  • 项目中后端如何处理异常?
  • 智慧水利数字孪生解决方案:百川孪生智领千行,100+标杆案例赋能智慧水利全域升级
  • 【LeetCode#第198题】打家劫舍(一维dp)
  • Compose笔记(二十七)--网格布局
  • SwinTransformer 改进:小波+注意力模块(Wavelet-Guided Attention)
  • 【LeetCode 热题 100】15. 三数之和——排序 + 双指针解法
  • WebeServer实现:学到了哪些东西
  • 缓存与加速技术实践-Kafka消息队列
  • Axios 在 Vue3 项目中的使用:从安装到组件中的使用
  • 【软考高级系统架构论文】论 SOA 在企业集成架构设计中的应用
  • 【软考高级系统架构论文】论多源数据集成及应用
  • AR眼镜与3D建模社区建设
  • stm32串口(uart)2转发到串口(uart)3实现
  • JVM知识点
  • 启动hardhat 项目,下载依赖的npm问题
  • React 虚拟dom
  • GNU Octave 基础教程(8):GNU Octave 常用数学函数
  • git的命令
  • IEC61850 通信协议测试验证方法详解
  • 经典:在浏览器地址栏输入信息到最终看到网页的全过程,涉及网络协议以及前后端技术
  • 我开源了一套springboot3快速开发模板
  • 八大架构宪法 - 技术使用指导说明文档
  • GitHub OAuth 认证示例
  • 人人都是音乐家?腾讯开源音乐生成大模型SongGeneration
  • springboot垃圾分类网站
  • 【Linux仓库】进程概念与基本操作【进程·贰】
  • 3D可视化数字孪生智能服务平台-物联网智控节能控、管、维一体化技术架构