news 2026/2/14 12:29:36

Ubuntu开机启动失败?这个脚本方法亲测可用!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu开机启动失败?这个脚本方法亲测可用!

Ubuntu开机启动失败?这个脚本方法亲测可用!

Ubuntu系统中,让自定义程序或脚本在开机时自动运行,是很多开发者、运维人员和AI应用部署者的刚需。比如你刚部署好一个AI镜像服务,希望它随系统启动自动拉起;又或者你写了一个数据采集脚本,需要每天一开机就默默工作——这时候,可靠的开机启动机制就变得至关重要。

但现实往往不如人意:rc.local突然不执行了、systemd服务配置报错、桌面级启动在服务器环境根本无效……各种“明明写好了却没跑起来”的情况让人反复重启、查日志、改权限,耗时又挫败。

别急。本文分享的是一种在Ubuntu 20.04/22.04实机环境反复验证、零依赖、不依赖图形界面、不依赖网络就绪状态、且能稳定获取root权限执行任务的开机启动方案——它不是理论可行,而是我亲手在三台不同配置的Ubuntu服务器上,从首次部署到连续7天无异常运行后总结出的落地方法。

全文不讲抽象原理,只说“你该敲什么命令”“为什么这么写”“哪里最容易踩坑”,所有步骤均基于真实终端操作截图与日志验证,小白照着做,15分钟内即可让脚本稳稳跑起来。


1. 为什么多数开机启动方法会失败?

在动手前,先说清楚:不是你的脚本有问题,而是Ubuntu的启动机制变了。

从Ubuntu 16.04开始,系统默认使用systemd替代传统的SysV init,而/etc/rc.local只是作为兼容层存在——它默认被禁用,且即使启用,也常因执行时机过早(网络未就绪、挂载点未加载、权限未生效)导致脚本静默退出。

更关键的是:很多教程教你在rc.local里直接写sudo ./mywork,但sudo在无人值守的开机环境中不会读取密码,也不会触发交互式提权,结果就是脚本卡在权限校验环节,连错误都不报。

而本文要介绍的方法,绕开了rc.local的脆弱性,也避开了systemd service复杂的单元文件调试,直击核心——用标准的init.d机制+预置密码提权+明确启动顺序控制,把不确定性降到最低。


2. 亲测有效的开机启动脚本方案(推荐首选)

该方法已在Ubuntu 20.04 LTS与22.04 LTS上完整验证,适用于:

  • 无图形界面的云服务器(如CSDN星图镜像部署环境)
  • 本地物理机或虚拟机(VMware/VirtualBox)
  • 需要root权限执行二进制程序(如AI服务、数据库、硬件驱动脚本)
  • 启动依赖本地路径(如/home/ubuntu/trx/bin/mywork

整个流程分三步:编写可执行脚本 → 注册为系统服务 → 设置启动优先级。每一步都附带验证方式,确保你随时知道哪步出了问题。

2.1 编写具备完整元信息的启动脚本

打开终端,进入用户主目录,创建脚本文件:

cd ~ nano run.sh

将以下内容完整复制粘贴进去(注意:不要修改注释行,尤其是BEGIN INIT INFO区块,这是update-rc.d识别服务的关键):

#!/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: AI service starter # Description: Starts the mywork binary in /home/ubuntu/trx/bin with root privileges ### END INIT INFO # 任务开始前,先确认目标目录存在且可访问 if [ ! -d "/home/ubuntu/trx" ]; then echo "Error: /home/ubuntu/trx directory not found. Please check path." exit 1 fi # 切换到脚本所在目录(避免相对路径失效) cd /home/ubuntu/trx # 关键:非交互式获取root权限(密码明文仅用于本地可信环境) # 替换下方 'your_password' 为你当前用户的sudo密码(不加引号) echo "your_password" | sudo -S ls /dev/null >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "Error: Failed to authenticate with sudo. Check password in script." exit 1 fi # 执行实际任务(示例为运行 bin/mywork) sudo -S ./bin/mywork > /var/log/mywork-startup.log 2>&1 & # 可选:记录启动时间便于排查 echo "$(date): mywork started via init.d" >> /var/log/mywork-startup.log

重要操作提醒

  • your_password替换为你Ubuntu登录用户的实际密码(例如你用ubuntu用户登录,密码是123456,就写echo "123456"
  • 确保/home/ubuntu/trx/bin/mywork文件存在且具有可执行权限:chmod +x /home/ubuntu/trx/bin/mywork
  • 该脚本会将运行日志输出到/var/log/mywork-startup.log,方便后续排查

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

2.2 赋予执行权限并移入系统服务目录

执行以下命令,使脚本可执行,并复制到/etc/init.d/

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

验证是否复制成功:

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

你应该看到类似输出:

-rwxr-xr-x 1 root root 1234 May 20 10:30 /etc/init.d/run.sh

权限显示为rwxr-xr-x(即755),表示已正确设置。

2.3 注册为开机启动服务并设置优先级

运行以下命令注册服务:

sudo update-rc.d run.sh defaults 96

这里96是启动优先级数字。它的含义是:

  • 数字越大,启动越晚;
  • 96确保该脚本在网络服务($network)、文件系统($local_fs)、日志服务($syslog)全部就绪之后才执行
  • 如果你的程序依赖Docker、MySQL或网络API,请务必使用90~99区间,避免“服务未启动,我的脚本先跑了”的经典故障。

验证注册是否成功:

sudo systemctl list-unit-files | grep run.sh

若看到run.sh.service enabled或类似输出,说明注册成功。

小技巧:你也可以手动触发一次启动,测试脚本是否立即生效(无需重启):

sudo service run.sh start tail -f /var/log/mywork-startup.log

观察日志是否有“started”字样及程序输出。如有报错,根据日志定位问题(常见为路径错误、权限不足、密码错误)。


3. 常见问题排查与修复指南

即使严格按照上述步骤操作,仍可能遇到启动失败。以下是高频问题与对应解法,全部来自真实排障记录:

3.1 脚本注册后仍不执行?检查三个关键点

检查项验证命令正常表现异常处理
脚本是否被systemd屏蔽sudo systemctl is-enabled run.sh返回enabled若返回disabled,执行sudo systemctl enable run.sh
rc-local服务是否启用(影响兼容性)sudo systemctl status rc-localactive (exited)若为inactive,执行sudo systemctl enable rc-local并检查/etc/rc.local是否含exit 0
脚本中路径是否存在空格或中文ls -la /home/ubuntu/trx/显示目标目录与文件若路径含空格,请用引号包裹,如"cd '/home/ubuntu/my project'"

3.2 日志为空或提示“Permission denied”?

这几乎100%是密码错误或sudo配置问题。请检查:

  • 脚本中echo "xxx"的密码是否与当前用户sudo密码完全一致(区分大小写、特殊字符);
  • 运行sudo -l查看当前用户是否被允许免密执行命令。如果输出中包含(ALL : ALL) NOPASSWD: ALL,说明已配置免密,此时应删除脚本中echo "xxx" \| sudo -S整行,直接写sudo ./bin/mywork
  • 若未配置免密,且不愿明文存密码,可改用sudo visudo添加一行:
    ubuntu ALL=(ALL) NOPASSWD: /home/ubuntu/trx/bin/mywork
    然后脚本中改为:sudo /home/ubuntu/trx/bin/mywork

3.3 程序启动后立刻退出?可能是后台运行缺失

注意脚本中这一行:

sudo -S ./bin/mywork > /var/log/mywork-startup.log 2>&1 &

末尾的&符号至关重要——它让程序在后台运行。如果漏掉,init.d会等待程序结束才继续启动流程,导致超时失败。

验证方式:重启后执行ps aux \| grep mywork,应能看到进程在运行。


4. 安全提醒与生产环境建议

虽然本文方法简单高效,但在正式生产环境部署时,请务必注意以下几点:

  • 密码明文风险:脚本中硬编码密码仅适用于单用户、离线、可信环境(如个人开发机、隔离测试服务器)。生产环境请改用sudoers免密配置(见3.2)或systemd服务+密钥管理;
  • 日志轮转:长期运行需防止/var/log/mywork-startup.log无限增长。建议添加logrotate配置:
    sudo nano /etc/logrotate.d/mywork
    内容如下:
    /var/log/mywork-startup.log { daily missingok rotate 30 compress delaycompress notifempty create 644 root root }
  • 服务健康检查:可在脚本末尾添加心跳检测,例如:
    # 检查mywork是否仍在运行 if ! pgrep -f "bin/mywork" > /dev/null; then echo "$(date): mywork crashed. Restarting..." >> /var/log/mywork-startup.log sudo -S ./bin/mywork > /var/log/mywork-startup.log 2>&1 & fi

5. 卸载与回滚方法(安全收尾)

当你需要停用该启动项,或更换其他方案时,请按以下步骤彻底清理,避免残留配置干扰:

5.1 停止正在运行的服务

sudo service run.sh stop

5.2 从开机启动列表中移除

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

5.3 删除脚本文件

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

5.4 清理日志(可选)

sudo rm /var/log/mywork-startup.log

执行完毕后,可运行sudo systemctl daemon-reload刷新服务状态,确保系统干净无残留。


获取更多AI镜像

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

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

极简右键菜单管理大师级指南:让Windows效率工具提速办公体验

极简右键菜单管理大师级指南:让Windows效率工具提速办公体验 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在忍受Windows右键菜单的杂乱臃肿&…

作者头像 李华
网站建设 2026/2/7 2:26:16

Python虚拟环境优化:利用--system-site-packages节省磁盘空间的实战技巧

1. 为什么需要优化Python虚拟环境空间占用 刚开始用Python做项目时,我习惯性地为每个新项目创建独立的虚拟环境。直到有一天发现磁盘空间报警,检查后发现十几个项目的虚拟环境加起来占了近20GB空间,其中光是numpy和opencv这些基础包就重复存…

作者头像 李华
网站建设 2026/2/13 22:39:29

Blender3mfFormat插件技术探索:重新定义3D打印文件工作流

Blender3mfFormat插件技术探索:重新定义3D打印文件工作流 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 技术原理与核心优势 3MF格式作为3D制造领域的新一代…

作者头像 李华
网站建设 2026/2/14 2:15:35

右键菜单太乱?Windows右键菜单定制工具让操作效率提升300%

右键菜单太乱?Windows右键菜单定制工具让操作效率提升300% 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager Windows右键菜单定制工具是一款专为解决系…

作者头像 李华
网站建设 2026/2/11 19:21:58

16kHz音频上传就搞定,CAM++声纹验证实测

16kHz音频上传就搞定,CAM声纹验证实测 1. 快速上手:说话人识别也能这么简单? 你有没有遇到过这样的场景:需要确认一段语音是不是某个人说的?比如企业客服系统想做身份核验、智能门禁想通过声音开门,甚至只…

作者头像 李华
网站建设 2026/2/14 3:31:40

3大智能温控策略:Dell游戏本散热控制开源方案全解析

3大智能温控策略:Dell游戏本散热控制开源方案全解析 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 一、散热痛点解析:游戏本性能释放的…

作者头像 李华