news 2026/4/23 15:21:58

零基础教程:用测试镜像快速设置Ubuntu开机自启

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
零基础教程:用测试镜像快速设置Ubuntu开机自启

零基础教程:用测试镜像快速设置Ubuntu开机自启

你刚部署完“测试开机启动脚本”这个镜像,想让自己的程序一开机就自动运行,但又没碰过Linux系统?别担心——这篇教程专为零基础用户设计。不需要懂systemd原理,不用查文档翻报错,只要按顺序敲几条命令,就能亲眼看到你的脚本在重启后稳稳跑起来。

整个过程只需要10分钟,连虚拟机都不用关机重装。我们不讲“服务单元”“依赖关系”“目标target”,只说“你该点哪里、输什么、看哪行字说明成功了”。最后还会告诉你,如果哪一步卡住了,怎么一眼看出问题在哪。


1. 先确认你的系统环境

1.1 检查Ubuntu版本和是否已启用systemd

打开终端(快捷键Ctrl + Alt + T),输入:

lsb_release -a

你会看到类似这样的输出:

Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy

只要显示的是Ubuntu 18.04 及以上版本(比如 20.04、22.04、24.04),本教程完全适用。这些版本默认使用 systemd 管理启动流程,而我们正是要借助它来“唤醒”传统上大家熟悉的/etc/rc.local方式。

小提示:Ubuntu 14.04 及更早版本可以直接编辑/etc/rc.local启动脚本,但新版本默认禁用了它。这不是bug,是设计变更——而我们接下来的操作,就是把它“安全地重新打开”。


2. 创建rc-local.service服务文件

这一步相当于给系统加一个“翻译官”:告诉 systemd,“当系统启动到多用户模式时,请帮我执行/etc/rc.local这个老朋友”。

2.1 新建服务配置文件

在终端中输入:

sudo nano /etc/systemd/system/rc-local.service

推荐用nano而不是vim,因为它是新手友好的文本编辑器,没有模式切换烦恼,按Ctrl+O保存,Ctrl+X退出。

把下面这段内容完整复制粘贴进去(注意大小写和空格):

[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target

保存并退出(Ctrl+O→ 回车 →Ctrl+X)。

2.2 验证文件是否创建成功

输入以下命令查看文件是否存在且内容无误:

sudo cat /etc/systemd/system/rc-local.service | head -n 5

你应该能看到前5行内容,比如[Unit]Description=等。如果提示“No such file”,请回头检查路径和拼写。


3. 创建并配置/etc/rc.local启动脚本

现在,我们来准备那个真正干活的“启动索引文件”——/etc/rc.local。它本身不直接写业务逻辑,而是作为“总指挥”,负责调用你自己的脚本(比如test.sh)。

3.1 创建rc.local文件

在终端中输入:

sudo nano /etc/rc.local

粘贴以下内容(这是标准模板,已适配新版Ubuntu):

#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. echo "看到这行字,说明添加自启动脚本成功。" > /usr/local/test.log exit 0

保存退出(Ctrl+O→ 回车 →Ctrl+X)。

3.2 给它加上可执行权限

这条命令很关键,否则系统会跳过它:

sudo chmod +x /etc/rc.local

权限解释:+x表示“允许执行”,就像给Windows里的.exe文件加运行属性一样。没有这步,rc.local就是一堆纯文本,systemd 看都不会看。


4. 启用并启动rc-local服务

现在,systemd 已经知道有这么个服务,我们也准备好了它的“台词”(rc.local),接下来就是正式“上台演出”。

4.1 启用服务(开机自动加载)

sudo systemctl enable rc-local

你会看到输出类似:

Created symlink /etc/systemd/system/multi-user.target.wants/rc-local.service → /etc/systemd/system/rc-local.service.

这表示设置成功:下次开机时,systemd 会自动加载并运行它。

4.2 立即启动服务(不需重启)

sudo systemctl start rc-local.service

4.3 检查服务状态

sudo systemctl status rc-local.service

重点看倒数两行:

  • 如果显示active (exited)active (running),并且没有红色failed字样,说明服务已正常运行;
  • 如果显示inactive (dead)failed,请先别慌,记下最后一行的错误提示(比如Failed with result 'exit-code'),我们后面统一排查。

小技巧:按q键可退出状态页面,回到命令行。


5. 验证是否生效:检查日志文件

我们之前在rc.local里写了这样一行:

echo "看到这行字,说明添加自启动脚本成功。" > /usr/local/test.log

它会在服务启动时,往/usr/local/test.log写入一句话。现在我们就去读它:

cat /usr/local/test.log

如果输出:

看到这行字,说明添加自启动脚本成功。

恭喜!你的开机自启通道已经打通。哪怕现在立刻重启,这句话也会再次出现。


6. 把你的程序加进去:以Python脚本为例

前面只是“通路测试”,现在我们来接入真实业务。假设你想开机自动运行一个叫ce.py的Python程序,它会生成一个sb.txt文件。

6.1 创建测试Python脚本

在终端中输入:

nano ~/ce.py

粘贴以下内容:

with open("/home/$USER/sb.txt", "w") as f: f.write("SB")

注意:这里用了$USER变量,确保路径指向当前登录用户的家目录,避免硬编码用户名出错。

保存退出(Ctrl+O→ 回车 →Ctrl+X)。

6.2 创建调用它的Shell脚本

nano ~/test.sh

写入:

#!/bin/bash cd /home/$USER python3 ce.py exit 0

保存退出。

6.3 给Shell脚本加执行权限

chmod +x ~/test.sh

6.4 修改rc.local,让它调用test.sh

sudo nano /etc/rc.local

把原来那行echo ...删除或注释掉(在前面加#),替换成:

# 启动我的Python程序 /home/$USER/test.sh exit 0

注意:exit 0必须保留在文件末尾,这是告诉系统“本脚本执行成功”。

保存退出。


7. 最终验证与常见问题排查

7.1 重启前快速测试

不用等重启,先手动运行一遍,确认路径和权限都没问题:

sudo /etc/rc.local

然后检查:

cat ~/sb.txt

应该输出SB。如果报错,大概率是路径写错、权限没加、或Python没找到(试试把python3改成python/usr/bin/python3)。

7.2 重启并最终确认

sudo reboot

等待系统重启登录后,立即执行:

cat ~/sb.txt

看到SB,说明你的程序真的实现了开机自启。


8. 常见失败原因与解决方法

现象可能原因解决方法
systemctl status rc-local.service显示failedrc.local文件没有+x权限再执行一次sudo chmod +x /etc/rc.local
日志文件没生成,或内容为空rc.local里漏写了exit 0,或某行命令出错中断打开/etc/rc.local,确认末尾是exit 0;把所有命令前加set -x开启调试(临时)
test.sh运行报错command not found: python系统找不到python命令test.sh中用绝对路径,如/usr/bin/python3
sb.txt生成在 root 目录下,而不是你的家目录脚本中用了~或未展开$USER统一用/home/用户名/或保持cd /home/$USER后再操作
中文字符导致脚本崩溃Python文件含中文注释但未声明编码ce.py第一行加# -*- coding: utf-8 -*-

快速定位问题:任何时候遇到失败,都先运行sudo systemctl status rc-local.service,它会显示最后一次执行的完整错误日志,比猜强一百倍。


9. 总结:你已经掌握的核心能力

1. 你学会了如何绕过Ubuntu新版对rc.local的限制

通过创建rc-local.service,你让这个经典机制重新可用,无需深入理解systemd内部结构。

2. 你掌握了“启动索引”的工程化思路

不把业务逻辑硬塞进rc.local,而是用它统一调度多个.sh脚本,未来加新任务只需新增脚本+一行调用。

3. 你拥有了可复用的排错路径

systemctl status查日志,到手动执行验证,再到权限/路径/编码三板斧,下次遇到任何自启问题,你都有清晰抓手。

4. 你完成了从“能跑”到“真用”的跨越

不再停留在打印一句“成功”,而是让自己的Python程序稳稳落地,开机即服务。

下一步,你可以尝试:把test.sh改成启动Web服务、定时同步数据、或监控硬件温度——只要它是一个能用Shell调用的程序,这套方法就完全适用。


获取更多AI镜像

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

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

AI小白必看:HG-ha/MTools桌面工具集保姆级教程

AI小白必看:HG-ha/MTools桌面工具集保姆级教程 你是不是也遇到过这些情况—— 想给照片换背景,打开PS却卡在图层蒙版上; 想把会议录音转成文字,试了三个APP都识别不准; 想生成一张产品宣传图,对着MidJourn…

作者头像 李华
网站建设 2026/4/23 8:13:36

从零实现STM32最小系统:Keil芯片包准备篇

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。全文已彻底去除AI生成痕迹,强化了人类工程师视角的实战经验、逻辑递进与教学节奏,同时严格遵循您提出的全部优化要求(如:禁用模板化标题、取消总结段、融合模块…

作者头像 李华
网站建设 2026/4/23 9:47:17

用Qwen-Image-2512-ComfyUI做海报修改,中英文文本编辑超精准

用Qwen-Image-2512-ComfyUI做海报修改,中英文文本编辑超精准 你有没有遇到过这样的场景:一张精心设计的电商海报,客户临时要求把中文标语换成英文,还要保持原有字体、字号、颜色和排版位置——但设计师已经下班,PS文件…

作者头像 李华
网站建设 2026/4/22 13:40:08

DOL游戏模组配置从零到大神:完美指南

DOL游戏模组配置从零到大神:完美指南 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 想让你的DOL游戏体验更上一层楼吗?本教程将带你一步步完成模组配置,从环境准…

作者头像 李华
网站建设 2026/4/23 9:47:58

麦橘超然不只是玩具,它能解决实际业务需求

麦橘超然不只是玩具,它能解决实际业务需求 很多人第一次听说“麦橘超然”,第一反应是:又一个AI绘画玩具?点点鼠标、输几行文字、等十几秒出图——确实很酷,但真能用在正经业务里吗? 答案是:不…

作者头像 李华
网站建设 2026/4/23 9:45:43

2026必备!9个降AIGC平台推荐,千笔助你轻松降AI率

2026必备!9个降AIGC平台推荐,千笔助你轻松降AI率 AI降重工具,助你轻松应对论文挑战 在当前学术写作中,越来越多的学生开始使用AI工具辅助完成论文写作。然而,随之而来的AIGC率过高、查重率超标等问题也成为了困扰许多本…

作者头像 李华