news 2026/4/23 14:29:57

手把手教你设置开机启动脚本,新手必看指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你设置开机启动脚本,新手必看指南

手把手教你设置开机启动脚本,新手必看指南

在Linux系统里,很多实用的小工具、监控脚本或者自定义服务,我们希望它一开机就自动跑起来——不用每次手动敲命令,也不用担心忘记启动。但对刚接触Linux的新手来说,“怎么让脚本开机就运行”这个问题常常卡住:是往/etc/rc.local里加?还是用crontab @reboot?又或者听说了systemd但完全不知道从哪下手?

别急。这篇指南不讲概念堆砌,不列一堆参数让你头晕,而是用最直白的方式,带你从零开始,把一个普通Shell脚本稳稳当当地变成“开机自动运行”的可靠服务。整个过程只需要5分钟,连终端命令都给你写清楚,复制粘贴就能试。

你不需要懂systemd的底层原理,也不用背命令;只要你会保存文件、会输几行命令,就能搞定。文末还会告诉你怎么快速验证是否成功、遇到问题怎么看日志、哪些常见坑要绕开——全是实操中踩出来的经验。


1. 先确认你的脚本已经能正常运行

在让它“开机启动”之前,得先确保它自己能跑通。这是最容易被忽略,却最关键的第一步。

假设你已经写好了一个脚本,比如叫my-startup.sh,放在/home/pi/目录下(路径你可以按自己习惯调整)。我们先手动执行一次,看看有没有报错:

# 给脚本添加可执行权限(非常重要!) chmod +x /home/pi/my-startup.sh # 手动运行它 /home/pi/my-startup.sh

如果看到预期输出(比如打印一行“服务已启动”,或成功启动了某个程序),说明脚本本身没问题。
如果报错,比如command not foundPermission denied,请先解决权限或路径问题,再继续下一步。

小提醒:脚本第一行建议加上#!/bin/bash(称为 shebang),这样系统就知道用什么解释器来运行它。如果你用的是其他Shell(如zsh),请对应修改。


2. 创建 systemd 服务文件(最推荐的方式)

Linux 现代发行版(Ubuntu 16.04+、Debian 8+、CentOS 7+、树莓派 OS、Orange Pi OS 等)默认使用systemd管理服务。它比老式的rc.local更稳定、更可控,还能自动重启失败的服务、记录详细日志——对新手其实更友好,只是名字听起来有点吓人。

我们来创建一个专属的服务配置文件:

2.1 新建服务文件

打开终端,输入以下命令(以my-startup.service为例,名字可以自定义,但必须以.service结尾):

sudo nano /etc/systemd/system/my-startup.service

提示:/etc/systemd/system/是用户自定义服务的标准存放位置,系统重启后也会识别这里。

2.2 填写服务配置内容

在编辑器里,粘贴下面这段内容(注意替换其中两处为你自己的信息):

[Unit] Description=我的开机启动脚本 After=network.target StartLimitIntervalSec=0 [Service] Type=simple ExecStart=/bin/bash /home/pi/my-startup.sh Restart=always RestartSec=3 User=pi Group=pi StandardOutput=journal StandardError=journal SyslogIdentifier=my-startup [Install] WantedBy=multi-user.target

逐项说明(你只需理解用途,不用死记):

  • Description:服务的中文描述,方便你以后一眼认出它;
  • After=network.target:表示等网络就绪后再启动,适合需要联网的脚本;
  • ExecStart:指定要运行的命令,这里用/bin/bash显式调用,避免环境变量缺失;
  • UserGroup:替换成你实际的用户名和组名(比如树莓派默认是pi,Ubuntu 桌面版可能是ubuntu);
  • Restart=always:脚本意外退出后,systemd 会自动重新拉起它,非常实用;
  • RestartSec=3:重启前等待3秒,避免频繁崩溃;
  • StandardOutput/StandardError=journal:把脚本的输出和错误都记进系统日志,方便后续排查。

注意:不要直接复制带中文注释的版本到文件里——#开头的行在 systemd 配置中是注释,但上面示例里的中文说明是写给你的,实际粘贴时请只保留[Unit][Service][Install]及其下方的纯配置行。

2.3 保存并退出

nano编辑器中:

  • Ctrl+O→ 回车保存
  • Ctrl+X退出

3. 启用并测试服务

现在配置文件有了,但 systemd 还不知道它的存在。我们需要三步操作:重载配置 → 启用开机自启 → 立即启动测试。

3.1 重载 systemd 配置

告诉 systemd:“我新建了一个服务,请重新读一遍所有配置”:

sudo systemctl daemon-reload

这一步不能跳过,否则后面启用会失败。

3.2 启用开机自启

让这个服务在每次系统启动时自动加载:

sudo systemctl enable my-startup.service

你会看到类似提示:Created symlink ...,说明已成功注册。

3.3 立即启动并检查状态

不用重启电脑,现在就可以手动触发一次,验证是否真能跑起来:

sudo systemctl start my-startup.service

然后立刻查看运行状态:

sudo systemctl status my-startup.service

正常情况下,你会看到:

  • Active: active (running)(绿色字体)
  • 最近几行显示脚本的输出(比如Started 我的开机启动脚本
  • 如果脚本有echo输出,也会出现在这里

如果显示failedinactive,别慌——接着看第4节查日志。


4. 快速定位问题:看日志比猜强十倍

90% 的启动失败,靠看日志就能秒解。systemd 把所有输出都集中存档,调取非常方便。

4.1 查看最近10条日志(最常用)

sudo journalctl -u my-startup.service -n 10 --no-pager
  • -u指定服务名
  • -n 10只显示最后10行
  • --no-pager避免进入分页模式,直接输出到屏幕

4.2 实时跟踪日志(适合调试中)

sudo journalctl -u my-startup.service -f
  • -f表示 follow(实时刷新),就像监控直播一样,脚本一输出,你就立刻看到。

常见错误及对策:

日志提示可能原因解决方法
Permission denied脚本没加执行权限再运行一次chmod +x /home/pi/my-startup.sh
No such file or directoryExecStart路径写错了检查脚本路径是否完整、大小写是否正确、是否存在空格
Failed at step USER spawningUser=设置的用户名不存在whoami确认当前用户名,填到配置里
Process exited with code exit_code=126脚本第一行 shebang 错误或解释器不存在检查#!/bin/bash是否存在且路径正确

小技巧:如果脚本里用了cd切换目录,建议在ExecStart前加WorkingDirectory=指定工作路径,避免因路径问题导致命令找不到。


5. 其他方式对比:为什么推荐 systemd?

你可能在网上看到过别的方法,比如:

  • rc.local:传统方式,简单粗暴,但 Ubuntu 18.04+ 默认禁用,需额外启用,且无日志、无自动重启;
  • crontab @reboot:能用,但属于“定时任务”范畴,权限受限、环境变量不全、出错难追踪;
  • .bashrc.profile:只对交互式登录生效,服务类脚本根本不会触发。

systemd的优势很实在:

  • 一次配置,永久生效(包括所有后续系统更新);
  • 自带依赖管理(比如“等网络好了再启动”);
  • 出错自动重启,适合长期运行的守护进程;
  • 所有输出统一归档,查问题不翻天覆地找日志文件。

对新手来说,它反而更“省心”——不是更复杂,而是把容易出错的环节都帮你兜住了。


6. 进阶小贴士:让脚本更健壮

这些不是必须的,但加了之后会让你的脚本更像一个“正经服务”:

6.1 加个简单的健康检查

在脚本开头加一段检测逻辑,避免重复启动:

#!/bin/bash # 检查是否已在运行 if pidof -o %PPID -x "my-startup.sh" > /dev/null; then echo "$(date): 已在运行,退出" exit 0 fi echo "$(date): 开始执行..." # 你的主逻辑放在这里

6.2 控制启动时机(按需选择)

  • After=multi-user.target:基础多用户模式(推荐默认)
  • After=network-online.target:确保网络完全就绪(适合需要联网的脚本)
  • Wants=network-online.target:配合After使用,提高可靠性

6.3 限制资源,防止失控

如果脚本可能占用过高 CPU 或内存,可以在[Service]段加入:

MemoryLimit=100M CPUQuota=50%

这样即使脚本异常,也不会拖垮整台设备。


7. 总结:三步记住核心流程

回顾一下,整个过程其实就三件事,记住口诀:配→载→启

  • :写一个.service文件,填好ExecStartUserRestart这三个最关键的字段;
  • :运行sudo systemctl daemon-reload,让 systemd 重新读取配置;
  • sudo systemctl enable xxx.service(开机自启) +sudo systemctl start xxx.service(立即测试)。

不需要记几十个参数,不需要理解 cgroup 或 D-Bus,只要这三步走对,你的脚本就能稳稳当当在每次开机时自动上岗。

你现在就可以打开终端,花2分钟试试——把本文的示例脚本名、路径、用户名替换成你自己的,照着敲一遍。成功那一刻,你会真切感受到:Linux 的自动化,并没有想象中那么遥远。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 21:02:15

AI绘画新体验:Z-Image-Turbo极速生成壁纸全攻略

AI绘画新体验:Z-Image-Turbo极速生成壁纸全攻略 你有没有试过——输入一句话,三秒后,一张堪比电影海报的高清壁纸就铺满整个屏幕?不是预渲染,不是模板套用,而是从零开始、逐像素生成的原创视觉作品。Z-Ima…

作者头像 李华
网站建设 2026/4/16 10:52:16

ViT图像分类-中文-日常物品生产环境:4090D单卡稳定支撑高并发识别服务

ViT图像分类-中文-日常物品生产环境:4090D单卡稳定支撑高并发识别服务 1. 这不是“又一个”图像识别模型,而是能认出你家厨房里那把旧菜刀的AI 你有没有试过拍一张家里常见的物品照片——比如一包没拆封的挂面、一个带裂纹的搪瓷杯、或者窗台上那盆快枯…

作者头像 李华
网站建设 2026/4/17 21:25:32

无需配置!用SGLang快速部署Qwen3-Embedding-0.6B服务

无需配置!用SGLang快速部署Qwen3-Embedding-0.6B服务 你是否还在为部署一个文本嵌入服务而反复调试环境、安装依赖、修改配置文件、处理CUDA版本冲突而头疼?是否试过多个框架,最后卡在“模型加载失败”或“端口被占用”的报错里动弹不得&…

作者头像 李华
网站建设 2026/4/20 2:22:46

Ollama中ChatGLM3-6B-128K的GPU算力适配:单卡A10部署128K推理的完整配置

Ollama中ChatGLM3-6B-128K的GPU算力适配:单卡A10部署128K推理的完整配置 1. 为什么是ChatGLM3-6B-128K?长文本场景下的真实需求 你有没有遇到过这样的问题: 处理一份50页的技术文档摘要,模型刚读到一半就“忘记”开头说了什么&…

作者头像 李华
网站建设 2026/4/21 9:55:24

lychee-rerank-mm快速部署:Docker run一行命令启动多模态重排序服务

lychee-rerank-mm快速部署:Docker run一行命令启动多模态重排序服务 1. 这不是另一个图文匹配工具,而是专为4090打造的“图库智能筛子” 你有没有过这样的经历:电脑里存了上千张产品图、设计稿或活动照片,想找一张“穿蓝衬衫站在…

作者头像 李华
网站建设 2026/4/22 0:25:44

全任务零样本学习-mT5中文-base详细步骤:GPU显存监控与推理性能调优

全任务零样本学习-mT5中文-base详细步骤:GPU显存监控与推理性能调优 1. 模型能力与技术亮点 1.1 什么是全任务零样本学习-mT5中文-base 全任务零样本学习-mT5中文-base,不是简单微调的中文版mt5,而是一个专为中文文本增强场景深度优化的增…

作者头像 李华