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

怎么配置 Shell 脚本开机自启动 systemd 服务?

最稳妥的方式是编写一个 systemd 单元文件,将脚本纳入系统服务管理,而不是修改 rc.local 或 crontab。

先说结论:systemd 是目前主流 Linux 发行版的标准初始化系统,配置服务自启动应优先使用 .service 文件。

  • 适合:主流使用 systemd 的 Linux 发行版(如 CentOS 7+、Ubuntu 16.04+ 等)
  • 先准备:确保脚本有执行权限,且路径中不包含相对符号
  • 验收:重启后服务状态为 active (running) 或 active (exited),且日志无报错
  • 注意:根据脚本类型选择 Type 配置(一次性任务用 oneshot,常驻进程用 simple)

1. 准备脚本文件

编写一个可执行的 Shell 脚本,确保第一行包含 shebang(如 #!/bin/bash),并赋予执行权限。

示例脚本内容(/path/to/your-script.sh):

#!/bin/bash
# 示例:记录启动时间到日志
echo "Script started at $(date)" >> /var/log/my-script.log# 如果是常驻进程,需要保持运行,例如:
# while true; do
#   sleep 60
# done
exit 0
chmod +x /path/to/your-script.sh

2. 创建 systemd 服务文件

在 /etc/systemd/system/ 目录下新建文件,命名建议全小写并以 .service 结尾,避免使用空格或特殊字符。

方法一:使用 tee 命令直接写入(适合复制粘贴)

sudo tee /etc/systemd/system/your-service.service > /dev/null <

方法二:使用编辑器手动创建

sudo vim /etc/systemd/system/your-service.service

将上述配置内容粘贴进去并保存退出。

3. 关键配置说明(Type 选择)

根据脚本运行模式选择正确的 Type,否则可能导致服务状态判断异常:

  • Type=oneshot:适用于执行完即退出的脚本(如初始化配置、一次性任务)。需配合 RemainAfterExit=yes 使用,否则服务状态会显示 inactive。
  • Type=simple:适用于常驻进程(如 Web 服务、后台循环脚本)。systemd 认为 ExecStart 启动的主进程即为服务进程,若进程退出则服务视为停止。
  • Type=forking:适用于传统守护进程(父进程启动后 fork 子进程并退出)。

4. 重载并启用服务

修改配置后必须重载守护进程,然后设置开机启用并立即启动。

sudo systemctl daemon-reload
sudo systemctl enable your-service.service
sudo systemctl start your-service.service

5. 怎么验证是否生效

使用 status 命令查看当前运行状态,确认 Active 字段为 active (running) 或 active (exited)。

systemctl status your-service.service

查看启动日志,确认脚本执行过程中没有报错信息。

journalctl -u your-service.service -b

重启服务器后,再次执行 status 命令,确认服务是否自动拉起。

6. 常见坑与排查

  • 路径问题:service 文件中 ExecStart 必须写绝对路径,脚本内部涉及的文件操作也建议使用绝对路径。
  • 环境变量:systemd 启动的环境变量与用户登录 shell 不同,如需加载 profile,需在脚本中 source 或在该文件 Environment 字段指定。
  • 网络依赖:如果脚本需要联网,务必在 [Unit] 中配置 After=network.target 或 After=network-online.target,否则可能因网络未就绪而失败。
  • 权限不足:确保运行服务的用户(默认 root)有权限执行脚本及访问相关资源,必要时配置 User 字段。
  • 脚本无执行权限:即使 systemd 配置正确,若脚本本身没有 x 权限,服务也会启动失败(Failed with result 'exit-code')。

原文链接:https://www.zjcp.cc/ask/10976.html

http://www.jsqmd.com/news/807125/

相关文章:

  • [STM32U3] 【每周分享】【STM32U385RG 测评】+串口发送、接收数据
  • 哔哩下载姬DownKyi:你的B站视频素材管理专家
  • MCU集成可编程逻辑单元:硬件加速与系统优化实战解析
  • 2025-2026年北京家装公司推荐:五家排名评测新房装修控预算案例 - 品牌推荐
  • OpenClaw近一月版本更替讲解
  • OpenClaw:重新定义 AI 智能体,从对话到执行的全能 “龙虾
  • Chiplet架构如何重塑以太网交换芯片设计与数据中心网络
  • Notepad++写HTML全攻略
  • AI智能体交互体验优化:从对话管理到个性化记忆的工程实践
  • 2025-2026年晟鑫财税电话查询:选择财税服务前请核实资质与风险提示 - 品牌推荐
  • STM32F103 IAP实战:从Bootloader设计到远程固件更新
  • 焕新暴雨品牌领航开新局
  • 如何使用日志实现业务全链路追踪
  • FPGA浮点运算实现:从原理到自定义16位加法器实战
  • 线下展会价值与高效参会指南:从技术发现到工程实践
  • modbus 512 断线重连 db browser for sqlite
  • 强化学习中的 On-policy 与 Off-policy 全面解析
  • 半导体市场预测:拆解增长逻辑、驱动力与供应链博弈
  • Flink:Keyed State vs Operator State 原理与实践
  • API网关设计:统一管理前端API的最佳实践
  • 画电气原理图的软件哪个最好用?CAD与EPLAN对比!
  • OpenAI成立部署公司并收购Tomoro,AI竞争焦点转向企业落地
  • 告别单调!用LVGL Button控件打造3种高级交互动效(附完整C代码)
  • C#初步认识/入门基础
  • 3步搞定!Mac用户必备的微信聊天记录永久保存方案
  • 本地部署9B代码智能体:从vLLM部署到能力评估实战
  • GitHub每日一题项目:结构化面试训练与社区驱动学习指南
  • EDA/IP标准演进:从OSCI与Accellera合并看行业协同与统一
  • 实证论文不用愁!虎贲等考 AI 数据分析:零代码跑模型,图表 + 结论一键生成
  • 观察Taotoken用量看板如何帮助团队透明化管理API成本