2026/2/21 12:33:48
网站建设
项目流程
对网站建设的维护,江苏建设厅官网网站,放心网站推广优化咨询,网站建设报价兴田德润在哪里零基础教程#xff1a;用测试镜像快速设置Ubuntu开机自启
你刚部署完“测试开机启动脚本”这个镜像#xff0c;想让自己的程序一开机就自动运行#xff0c;但又没碰过Linux系统#xff1f;别担心——这篇教程专为零基础用户设计。不需要懂systemd原理#xff0c;不用查文…零基础教程用测试镜像快速设置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因为它是新手友好的文本编辑器没有模式切换烦恼按CtrlO保存CtrlX退出。把下面这段内容完整复制粘贴进去注意大小写和空格[Unit] Description/etc/rc.local Compatibility ConditionPathExists/etc/rc.local [Service] Typeforking ExecStart/etc/rc.local start TimeoutSec0 StandardOutputtty RemainAfterExityes SysVStartPriority99 [Install] WantedBymulti-user.target保存并退出CtrlO→ 回车 →CtrlX。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保存退出CtrlO→ 回车 →CtrlX。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.service4.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变量确保路径指向当前登录用户的家目录避免硬编码用户名出错。保存退出CtrlO→ 回车 →CtrlX。6.2 创建调用它的Shell脚本nano ~/test.sh写入#!/bin/bash cd /home/$USER python3 ce.py exit 0保存退出。6.3 给Shell脚本加执行权限chmod x ~/test.sh6.4 修改rc.local让它调用test.shsudo 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/python3sb.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星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。