超详细图解:Ubuntu开机启动脚本配置全流程

超详细图解:Ubuntu开机启动脚本配置全流程

在实际开发和运维过程中,我们常常需要让某些程序或脚本在系统启动时自动运行。比如部署服务、启动监控脚本、挂载资源等场景,手动每次输入命令显然不现实。本文将带你从零开始,手把手完成 Ubuntu 系统下开机启动脚本的完整配置流程,涵盖环境准备、脚本编写、权限设置、注册启动项、验证与调试等所有关键步骤。

无论你是刚接触 Linux 的新手,还是想巩固系统管理技能的开发者,这篇文章都能让你一次搞懂、一次配通、一次落地


1. 开机启动的核心机制解析

在深入操作前,先简单了解 Ubuntu 是如何执行开机脚本的,有助于我们选择合适的方法并排查问题。

Ubuntu 使用的是SysVinit 或 systemd 兼容模式来管理启动任务。虽然新版系统已转向systemd,但/etc/init.d/rc.local仍被广泛支持,尤其适合快速部署自定义脚本。

常见的四种方式对比:

方法是否推荐适用场景特点
创建独立 init 脚本(/etc/init.d)强烈推荐无界面服务器、后台服务稳定、可控性强、支持优先级设置
修改 rc.local可用但受限简单命令启动配置简单,但部分版本默认不启用
桌面环境自启动❌ 不通用图形界面用户依赖 GUI 登录,不适合服务器
systemd service 单元推荐进阶使用复杂服务管理更现代,功能强大,学习成本略高

本文主推第一种方法:创建独立 init 脚本,因为它兼容性好、结构清晰、易于维护,且经过多版本 Ubuntu 实测可用。


2. 准备你的启动脚本

我们将以一个实际例子演示:假设你有一个 Python 脚本/home/ubuntu/trx/bin/mywork.py,希望它在开机时自动运行。

### 2.1 编写可执行的 Shell 包装脚本

首先,在用户主目录下创建一个.sh脚本文件作为启动入口。

cd ~ nano run.sh

粘贴以下内容:

#!/bin/sh ### BEGIN INIT INFO # Provides: run.sh # Required-start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start mywork.py at boot # Description: Starts the custom Python script via shell wrapper ### END INIT INFO # 进入项目目录 cd /home/ubuntu/trx || exit 1 # 如果需要 root 权限运行程序(如绑定端口、访问设备),可在此获取 # 注意:不要在脚本中明文存储密码!此处仅为演示逻辑 # echo "your_password" | sudo -S true # 验证权限(非必要) # 执行实际任务(示例为 Python 脚本) sudo -u ubuntu python3 ./bin/mywork.py & # 返回成功状态 exit 0
关键说明:
  • #!/bin/sh:指定解释器
  • ### BEGIN INIT INFO块:这是必须的元信息,用于update-rc.d识别脚本依赖和运行级别
  • Default-Start: 2 3 4 5:表示在多用户文本/图形模式下启动
  • &:后台运行,避免阻塞系统启动
  • sudo -u ubuntu:以普通用户身份运行,提升安全性(避免全程 root)

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


3. 安装脚本到系统启动目录

接下来,把脚本移动到系统标准的启动脚本目录,并设置权限。

### 3.1 复制脚本到 /etc/init.d/

sudo cp ~/run.sh /etc/init.d/

### 3.2 设置可执行权限

sudo chmod +x /etc/init.d/run.sh

这一步非常重要,否则系统无法执行该脚本。

你可以通过以下命令确认权限是否正确:

ls -l /etc/init.d/run.sh

输出应包含-rwxr-xr-x,表示所有用户都有执行权限。


4. 注册开机启动项

使用update-rc.d工具将脚本注册为开机启动服务。

sudo update-rc.d run.sh defaults 96

参数解释:

  • defaults:使用默认的启动/停止优先级(S96/K04)
  • 96:启动顺序编号,数字越大越晚启动。如果你的脚本依赖网络,建议设为 90 以上,确保网络已就绪。

小贴士:常见服务优先级参考

  • 网络服务:约 S90
  • 自定义脚本:建议 S95~S99,防止依赖未加载

执行后你会看到类似提示:

Adding system startup for /etc/init.d/run.sh ... /etc/rc0.d/K04run.sh -> ../init.d/run.sh /etc/rc1.d/K04run.sh -> ../init.d/run.sh /etc/rc2.d/S96run.sh -> ../init.d/run.sh ...

这意味着脚本已在各个运行级别中注册。


5. 验证脚本能否手动运行

在重启之前,务必先测试脚本能否正常执行。

sudo /etc/init.d/run.sh start

观察是否有错误输出。如果一切正常,说明脚本可以被系统调用。

你也可以尝试以下命令查看其状态(尽管我们没实现 status 功能):

sudo service run.sh start

提示:若需支持service run.sh status,可在脚本中添加 case 判断处理start|stop|restart|status参数,本文为简化暂不展开。


6. 测试开机自动执行效果

现在进行最终验证。

sudo reboot

系统重启后,等待片刻,然后检查你的程序是否已在运行。

例如,如果你的mywork.py启动了一个 HTTP 服务,可以用:

ps aux | grep mywork.py

或者监听端口:

netstat -tuln | grep :8080

如果能看到进程存在,恭喜你——开机启动已成功配置!


7. 如何卸载开机启动脚本

当你不再需要这个启动项时,可以轻松移除。

### 7.1 删除启动链接

sudo update-rc.d -f run.sh remove

注意:-f表示强制删除,会移除所有符号链接。

### 7.2 删除脚本文件(可选)

sudo rm /etc/init.d/run.sh

至此,该启动项已完全清除。


8. 常见问题与解决方案

即使严格按照步骤操作,也可能遇到问题。以下是高频故障及应对策略。

### 8.1 脚本未执行,无任何反应

可能原因

  • 脚本没有可执行权限
  • INIT INFO 注释块缺失或格式错误
  • 路径写错(如 cd 到不存在的目录)

排查方法

sudo /etc/init.d/run.sh start

手动运行看报错信息。

### 8.2 提示 “Job is already running” 或 “not enabled”

这是systemd对旧脚本的兼容警告,通常不影响执行。只要脚本能跑起来,可忽略。

### 8.3 依赖网络的服务启动失败

现象:脚本中访问数据库、API 失败。

原因:网络尚未准备好。

解决办法

  • 将启动优先级调低(即数字更大),如S99
  • 在脚本中加入等待机制:
# 等待网络接口激活 while ! ping -c1 google.com &>/dev/null; do sleep 1 done

### 8.4 输出日志无法查看

建议在脚本中重定向输出,便于调试:

python3 ./bin/mywork.py >> /var/log/mywork.log 2>&1 &

同时确保日志目录可写:

sudo touch /var/log/mywork.log sudo chown ubuntu:ubuntu /var/log/mywork.log

9. 替代方案:使用 rc.local(备用推荐)

如果上述方法因系统版本问题不可用,可尝试启用rc.local

### 9.1 检查是否存在 rc.local 文件

ls /etc/rc.local

如果没有,创建它:

sudo nano /etc/rc.local

内容如下:

#!/bin/bash # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success. # Your command here su - ubuntu -c "cd /home/ubuntu/trx && python3 ./bin/mywork.py &" exit 0

### 9.2 设置可执行权限

sudo chmod +x /etc/rc.local

### 9.3 启用 rc-local 服务(仅 systemd 系统需要)

sudo systemctl enable rc-local sudo systemctl start rc-local

注意:Ubuntu 20.04+ 默认可能未安装rc-local.service,需手动创建或改用其他方式。


10. 总结:掌握核心,灵活应用

通过本文的详细指导,你应该已经掌握了在 Ubuntu 上配置开机启动脚本的完整流程。回顾一下关键步骤:

  1. 编写带 INIT INFO 的 shell 脚本
  2. 复制到/etc/init.d/并赋权
  3. 使用update-rc.d注册启动项
  4. 测试手动执行与重启验证
  5. 学会卸载与排错

这套方法适用于绝大多数基于 Debian/Ubuntu 的系统,无论是物理机、虚拟机还是云服务器镜像(如本文提到的“测试开机启动脚本”镜像),均可直接套用。


获取更多AI镜像

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1197890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

歌词同步神器LyricsX:让每一首歌都有完美歌词陪伴

歌词同步神器LyricsX:让每一首歌都有完美歌词陪伴 【免费下载链接】LyricsX 🎶 Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/lyr/LyricsX 还在为听歌时找不到合适的歌词而烦恼吗?🎵 今天我要…

Samloader终极指南:5分钟掌握三星官方固件下载技巧

Samloader终极指南:5分钟掌握三星官方固件下载技巧 【免费下载链接】samloader Download Samsung firmware from official servers 项目地址: https://gitcode.com/gh_mirrors/sa/samloader 还在为找不到可靠的三星固件下载方式而烦恼吗?Samloade…

指尖编程革命:平板与手机上的代码编辑新体验 [特殊字符]

指尖编程革命:平板与手机上的代码编辑新体验 🚀 【免费下载链接】vscode Visual Studio Code 项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode 还在为外出时无法及时修复bug而烦恼吗?想不想在平板上轻松编写代码&#…

Z-Image-Turbo启动失败怎么办?Supervisor进程守护配置教程

Z-Image-Turbo启动失败怎么办?Supervisor进程守护配置教程 Z-Image-Turbo是阿里巴巴通义实验室开源的高效AI图像生成模型,作为Z-Image的蒸馏版本,它以极快的生成速度(仅需8步)、卓越的图像质量(具备照片级…

Teachable Machine:让AI触手可及的智能学习平台

Teachable Machine:让AI触手可及的智能学习平台 【免费下载链接】teachablemachine-community Example code snippets and machine learning code for Teachable Machine 项目地址: https://gitcode.com/gh_mirrors/te/teachablemachine-community 你是否曾经…

基于FRCRN-16k镜像的语音增强实践|快速部署与推理

基于FRCRN-16k镜像的语音增强实践|快速部署与推理 你是否曾因录音中的风扇声、空调嗡鸣或街道噪音而苦恼?一段原本清晰的语音,在复杂环境中变得模糊不清,严重影响了后续使用。现在,借助 FRCRN语音降噪-单麦-16k 这一专…

unet人像卡通化支持REST API调用吗?接口封装思路详解

unet人像卡通化支持REST API调用吗?接口封装思路详解 1. 功能概述与核心价值 你手头的这个 unet person image cartoon compound 项目,是基于阿里达摩院 ModelScope 平台上的 DCT-Net 模型构建的人像卡通化工具。它已经具备了完整的 WebUI 界面&#x…

智能AI代码助手:为什么你的开发效率应该提升300%

智能AI代码助手:为什么你的开发效率应该提升300% 【免费下载链接】continue ⏩ Continue is an open-source autopilot for VS Code and JetBrains—the easiest way to code with any LLM 项目地址: https://gitcode.com/GitHub_Trending/co/continue 在当今…

Cemu模拟器快速入门:Wii U游戏完美运行指南

Cemu模拟器快速入门:Wii U游戏完美运行指南 【免费下载链接】Cemu Cemu - Wii U emulator 项目地址: https://gitcode.com/GitHub_Trending/ce/Cemu 还在为Wii U游戏在PC上的流畅运行而烦恼吗?Cemu模拟器作为目前最优秀的Wii U模拟器,…

Qwen3-Coder 30B:256K上下文,编程提效新工具

Qwen3-Coder 30B:256K上下文,编程提效新工具 【免费下载链接】Qwen3-Coder-30B-A3B-Instruct 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-Coder-30B-A3B-Instruct 导语:阿里达摩院最新推出的Qwen3-Coder-30B-A3B-Instr…

【珍藏】多模态大模型全攻略:技术原理、应用场景与开源模型详解(建议收藏学习)

在人工智能领域持续创新发展的浪潮中,多模态大模型已成为备受瞩目的焦点,其独特的技术架构和强大的功能,为 AI 应用开拓了全新的维度。今天,让我们深入剖析多模态大模型,全面了解它的内涵、与传统大模型的差异、常见模…

开源学习资源高效获取终极指南:大模型教材深度解析

开源学习资源高效获取终极指南:大模型教材深度解析 【免费下载链接】Foundations-of-LLMs 项目地址: https://gitcode.com/GitHub_Trending/fo/Foundations-of-LLMs 在人工智能技术快速迭代的当下,系统化学习资源成为技术从业者的核心竞争力。浙…

文本排序避坑指南:用Qwen3-Reranker-0.6B少走弯路

文本排序避坑指南:用Qwen3-Reranker-0.6B少走弯路 在构建搜索、推荐或问答系统时,文本重排序(Reranking)是决定最终结果质量的关键一步。你可能已经通过Embedding模型完成了初步召回,但为什么用户仍然觉得“结果不够准…

Qwen3-VL-4B:4bit量化版多模态交互终极指南

Qwen3-VL-4B:4bit量化版多模态交互终极指南 【免费下载链接】Qwen3-VL-4B-Instruct-bnb-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-VL-4B-Instruct-bnb-4bit 导语:阿里云最新发布的Qwen3-VL-4B-Instruct-bnb-4bit模型&am…

阿里通义千问儿童版图像模型部署教程:开箱即用镜像实操手册

阿里通义千问儿童版图像模型部署教程:开箱即用镜像实操手册 你有没有想过,孩子随口说的一句“我想看穿裙子的小兔子”,就能变成一张色彩鲜艳、萌态十足的图片?现在,借助阿里通义千问推出的儿童向图像生成模型&#xf…

Z-Image-Turbo高效秘诀揭秘:S3-DiT架构带来的优势

Z-Image-Turbo高效秘诀揭秘:S3-DiT架构带来的优势 你有没有试过等一张图生成要半分钟?调参像开盲盒?显卡风扇狂转却只出一张模糊图?Z-Image-Turbo不是又一个“参数堆料”的模型——它用一套真正聪明的架构设计,把文生…

边缘可部署的翻译方案|体验HY-MT1.5-7B大模型的实时翻译能力

边缘可部署的翻译方案|体验HY-MT1.5-7B大模型的实时翻译能力 你是否遇到过这样的场景:在跨国会议中需要即时理解对方发言,或在海外旅行时面对陌生语言标识束手无策?传统的云端翻译服务虽然强大,但依赖网络、存在延迟&…

HunyuanImage-3.0开源:800亿参数AI绘图新王者登场

HunyuanImage-3.0开源:800亿参数AI绘图新王者登场 【免费下载链接】HunyuanImage-3.0-Instruct HunyuanImage-3.0 通过自回归框架统一多模态理解与生成,文本生成图像表现媲美或超越顶尖闭源模型 项目地址: https://ai.gitcode.com/tencent_hunyuan/Hun…

PaddleOCR-VL:0.9B轻量VLM高效解析多语言文档

PaddleOCR-VL:0.9B轻量VLM高效解析多语言文档 【免费下载链接】PaddleOCR-VL PaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 …

SAM3文本引导分割模型上线|输入英文描述即得物体掩码

SAM3文本引导分割模型上线|输入英文描述即得物体掩码 1. 引言:让图像分割像说话一样简单 你有没有遇到过这样的情况:手头有一张复杂的图片,需要把其中某个特定物体单独抠出来,但手动标注太费时间,传统分割…