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

【linux】systemct创建服务

在 Linux 系统中,可以通过 自定义 systemd 服务单元(unit) 来扩展 systemctl 的功能,使其管理自定义脚本、应用程序或后台任务。


1. 创建自定义 systemd 服务文件

systemd 服务文件通常以 .service 为后缀,存放在以下目录:

  • 系统级服务/etc/systemd/system/(推荐,优先级更高)
  • 用户级服务~/.config/systemd/user/(仅对当前用户生效)

示例:创建一个自定义服务

假设你想让 systemctl 管理一个 Python 脚本 /opt/myscript/main.py,步骤如下:

(1) 创建服务文件
sudo nano /etc/systemd/system/myscript.service
(2) 编写服务配置
[Unit]
Description=My Custom Python Script
After=network.target  # 确保网络就绪后启动[Service]
Type=simple
User=root             # 运行用户(建议用非 root 用户,如 `www-data`)
WorkingDirectory=/opt/myscript/
ExecStart=/usr/bin/python3 /opt/myscript/main.py
Restart=on-failure    # 失败时自动重启
RestartSec=5s         # 重启间隔[Install]
WantedBy=multi-user.target  # 系统多用户模式时启用
(3) 关键参数说明
参数作用
Description服务描述
After定义依赖(如 network.target 表示网络就绪后启动)
Typesimple(默认)、forking(后台进程)、oneshot(单次任务)
User运行身份(建议非 root)
ExecStart启动命令(必须用绝对路径!)
Restart自动重启策略(on-failurealwaysno
WantedBy定义服务所属运行级别(如 multi-user.target

2. 让 systemd 识别并管理服务

(1) 重新加载 systemd 配置
sudo systemctl daemon-reload
(2) 启动服务
sudo systemctl start myscript
(3) 设置开机自启
sudo systemctl enable myscript
(4) 检查状态
sudo systemctl status myscript

3. 高级自定义选项

(1) 环境变量

[Service] 部分添加:

Environment="VAR1=value1"
EnvironmentFile=/path/to/env-file  # 从文件加载变量

(2) 限制资源

[Service]
MemoryLimit=500M   # 内存限制
CPUQuota=50%       # CPU 限制

(3) 定时任务(替代 cron)

使用 systemd.timer 实现定时任务:

  1. 创建服务文件(如 /etc/systemd/system/mytask.service):
    [Unit]
    Description=My Daily Task[Service]
    Type=oneshot
    ExecStart=/path/to/script.sh
    
  2. 创建计时器文件(如 /etc/systemd/system/mytask.timer):
    [Unit]
    Description=Run mytask daily[Timer]
    OnCalendar=daily      # 每天执行
    Persistent=true       # 错过时间后补执行[Install]
    WantedBy=timers.target
    
  3. 启用计时器:
    sudo systemctl enable mytask.timer
    sudo systemctl start mytask.timer
    

4. 调试与日志

(1) 查看服务日志

journalctl -u myscript -xe  # 查看详细日志

(2) 测试命令

# 手动测试 ExecStart 命令
sudo /usr/bin/python3 /opt/myscript/main.py# 检查依赖
systemd-analyze verify myscript.service

5. 删除自定义服务

sudo systemctl stop myscript
sudo systemctl disable myscript
sudo rm /etc/systemd/system/myscript.service
sudo systemctl daemon-reload

总结

操作命令
创建服务文件sudo nano /etc/systemd/system/<服务名>.service
重载配置sudo systemctl daemon-reload
启动服务sudo systemctl start <服务名>
开机自启sudo systemctl enable <服务名>
查看日志journalctl -u <服务名>

通过自定义 systemd 服务,你可以将任何脚本、程序或任务集成到 Linux 的服务管理中,实现开机启动、崩溃重启、资源限制等功能。

相关文章:

  • 前端的core-js是什么?有什么作用?
  • Gitlab 的 WIP 不生效了?
  • Vue.js教学第十五章:深入解析Webpack与Vue项目实战
  • 办公软件DocLite免安装秒开!XP 到 Win11 全兼容支持 Office无广告干扰
  • 仓鼠找sugar--lca+图论判断点在路径
  • Leetcode刷题 | Day67_图论12_Floyd算法 / A*算法
  • 消息队列的使用
  • 滑动窗口算法:高效处理数组与字符串子序列问题的利器
  • 选择排序算法研究
  • web各类编码笔记
  • git子模块--命令--列表版
  • 清山垃圾的3个问题
  • 【Bluedroid】蓝牙Hid Host get_protocol全流程源码解析
  • UnLua源码分析(二)IUnLuaInterface
  • Mybatis Plus 拦截器忽略机制全解:InterceptorIgnoreHelper 源码与实战
  • IntelliJ IDEA 中配置 Gradle 的分发方式distribution
  • C++23 std::out_ptr 和 std::inout_ptr:提升 C 互操作性
  • 智能语音通信新标杆——A-29P神经网络AI降噪回音消除模块深度解析
  • NeuralRecon技术详解:从单目视频中实现三维重建
  • Go语言--语法基础5--基本数据类型--循环语句
  • 公章在线制作网站做不了/竞价托管公司联系方式
  • 长春网长春网站建设站建设/上海关键词优化报价
  • 上海公司注册代理公司/杭州网站seo价格
  • 门户网站的建设公司/长沙专业竞价优化首选
  • 58同城广告推广电话/长春网站seo哪家好
  • 展示网站/seo优化排名公司