news 2026/6/9 23:52:59

零基础教程:用测试镜像快速设置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/6/9 23:51:43

零基础小白也能懂:Open-AutoGLM手机AI代理实战教程

零基础小白也能懂:Open-AutoGLM手机AI代理实战教程 Open-AutoGLM 是智谱开源的轻量级手机端 AI Agent 框架,它不依赖复杂脚本、不需编程经验,只要你会说人话,就能让 AI 替你点开 App、搜索内容、填写表单、甚至完成多步操作。本文…

作者头像 李华
网站建设 2026/6/9 21:04:38

告别PS!AI魔法修图师教你用英语指令轻松编辑图片

告别PS!AI魔法修图师教你用英语指令轻松编辑图片 你有没有过这样的时刻:朋友发来一张旅行照,说“帮我把背景里的路人P掉”;电商运营催着改图,“主图要加个金色边框,但别盖住产品logo”;设计师同…

作者头像 李华
网站建设 2026/6/9 22:41:34

探索动物森友会存档编辑的无限可能:NHSE工具实战指南

探索动物森友会存档编辑的无限可能:NHSE工具实战指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否曾为动物森友会中稀有物品的获取而烦恼?是否想过重新规划岛屿布…

作者头像 李华
网站建设 2026/6/9 18:35:06

Nano-Banana惊艳效果:皮革手袋五金件+缝线路径+衬里结构三层解析

Nano-Banana惊艳效果:皮革手袋五金件缝线路径衬里结构三层解析 1. 什么是Nano-Banana:不止是AI绘图,而是结构思维的可视化引擎 你有没有试过盯着一只高级皮包发呆?不是看它多贵,而是琢磨:那颗黄铜搭扣是怎…

作者头像 李华
网站建设 2026/6/9 18:34:46

Qwen3-TTS-Tokenizer-12Hz体验报告:超低采样率下的高保真音频处理

Qwen3-TTS-Tokenizer-12Hz体验报告:超低采样率下的高保真音频处理 1. 这不是“降质压缩”,而是重新定义音频编码的边界 你有没有试过把一段3分钟的语音发给同事,结果发现文件太大传不动?或者在做语音合成训练时,光是…

作者头像 李华
网站建设 2026/6/9 18:38:29

Lychee Rerank MM入门必看:从零开始跑通Qwen2.5-VL多模态重排序全流程

Lychee Rerank MM入门必看:从零开始跑通Qwen2.5-VL多模态重排序全流程 1. 这不是普通排序,是多模态语义的“精准对焦” 你有没有遇到过这样的情况:在图片搜索引擎里输入“一只在咖啡馆看书的橘猫”,结果返回一堆模糊相关的图——…

作者头像 李华