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

【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 的服务管理中,实现开机启动、崩溃重启、资源限制等功能。

http://www.xdnf.cn/news/8889.html

相关文章:

  • 【C++】21. 红黑树的实现
  • 面试专栏04-SpringCloud
  • 相机内参 opencv
  • 基于Web组件实现随机抽奖
  • 云手机安卓12哪个好?掌派云手机安卓12系统上线,开启流畅体验新纪元
  • 指针数组和数组指针的区别
  • 华为OD机试真题—— 判断字符串子序列(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 【EcelVBA】系统学习 ActiveX 控件
  • 恒坤新材闯上市:利润受益于大额补贴,产能利用率低仍要募资扩产
  • OD 算法题 B卷【最长公共后缀】
  • C++修炼:哈希表的模拟实现
  • 【python实战】-- 选择解压汇总mode进行数据汇总20250525更新(篇幅2)
  • 塔能科技:以多元技术赋能全行业能耗节能转型
  • 力扣刷题(第三十七天)
  • Linux之概述和安装vm虚拟机
  • Oracle附加日志概述
  • Day 31 训练
  • 哪款云手机支持安卓12系统?掌派云手机-性价比之选
  • Threejs 透明模型渲染嵌套以及深度测试解决共存问题
  • 什么是ESLint?它有什么作用?
  • 10G/25G PCS only mode for CoaXPress Over Fiber
  • 9. Spring AI 各版本的详细功能与发布时间整理
  • 华为OD机试真题——出租车计费/靠谱的车 (2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • Spring Cloud Sleuth与Zipkin深度整合指南:微服务链路追踪实战
  • Python实战:轻松连接与高效操作Elasticsearch
  • HDFS存储原理与MapReduce计算模型
  • 嵌入式学习笔记——day27
  • 奈雪小程序任务脚本
  • 计算机病毒的发展历程及其分类
  • Lua 脚本在 Redis 中的运用-22