Ubuntu18.04开机自启难?测试脚本帮你搞定

Ubuntu18.04开机自启难?测试脚本帮你搞定

你是不是也遇到过这样的情况:写好了服务脚本,反复检查路径、权限、依赖,重启后却纹丝不动?Ubuntu 18.04 的开机自启,不像老版本那样改个/etc/rc.local就完事——systemd 接管了启动流程,但默认又没配好rc-local.service,结果就是“脚本写了,系统不认,重启白忙”。

别急。这篇不是泛泛而谈的 systemd 理论课,也不是照搬手册的命令堆砌。它是一份专为 Ubuntu 18.04 实测验证过的开机自启实战指南,聚焦一个核心目标:用最简路径,让一个测试脚本稳稳当当在系统启动完成时自动跑起来。全程基于真实环境操作,每一步都经虚拟机反复验证,连卡在启动界面的坑都给你标清楚了。

我们不讲抽象概念,只做三件事:
用一个 5 行 shell 脚本作为统一测试载体(记录时间、主机名、写入文件)
对比三种主流方案在 Ubuntu 18.04 上的真实表现(rc.local / systemd 用户级 / systemd 系统级)
给出明确结论:哪种方案最省心、哪种最容易踩坑、哪种适合长期维护

现在,就从你的终端开始。

1. 先建一个“会说话”的测试脚本

所有自启方案最终都要调用一个脚本。我们先把它写好、测通,再挂到启动流程里。这个脚本不干别的,就做三件事:打时间戳、记主机名、写进指定文件——效果可验证、过程无依赖、失败有日志。

1.1 创建并验证脚本功能

打开终端,执行以下命令(建议全程使用普通用户,避免误操作):

# 在家目录下创建测试脚本 cat > ~/startup-test.sh << 'EOF' #!/bin/bash # 记录启动时间、主机名,并追加到日志文件 echo "=== $(date) ===" >> /tmp/startup-log.txt echo "Hostname: $(hostname)" >> /tmp/startup-log.txt echo "User: $(whoami)" >> /tmp/startup-log.txt echo "Uptime: $(uptime)" >> /tmp/startup-log.txt echo "" >> /tmp/startup-log.txt EOF # 赋予执行权限 chmod +x ~/startup-test.sh # 手动运行一次,确认能生成日志 ~/startup-test.sh # 查看结果 cat /tmp/startup-log.txt

你应该看到类似这样的输出:

=== Mon Jun 10 14:23:45 CST 2024 === Hostname: ubuntu1804 User: user Uptime: 14:23:45 up 0 min, 1 user, load average: 0.12, 0.03, 0.01

成功。这个脚本就是我们后续所有方案的“统一测试体”,它不依赖网络、不调用 GUI、不读写敏感路径,纯粹验证“系统能否在启动完成后准确执行你的命令”。

1.2 为什么不用 echo “hello” 这类极简脚本?

因为太容易“假成功”。比如echo "hello" > /tmp/hello.txt,如果/tmp分区还没挂载完,这条命令就静默失败;而我们的脚本带dateuptime,这两个命令必须等基础系统服务就绪才能返回有效值——这才是真正反映“启动完成”的信号。

2. 方案一:复活 rc.local(最接近传统习惯,但需手动补全)

Ubuntu 18.04 默认保留了/etc/rc.local文件位置,但rc-local.service单元被禁用且缺少关键配置。很多人试了sudo systemctl enable rc-local却失败,问题就出在这里。

2.1 检查并修复 rc-local.service

首先确认系统是否自带该服务单元:

ls /lib/systemd/system/rc-local*

正常应输出/lib/systemd/system/rc-local.service。如果没看到,说明系统精简过度,需手动创建(但 Ubuntu 18.04 官方镜像通常自带)。

接着查看其内容:

sudo cat /lib/systemd/system/rc-local.service

你会发现[Install]段缺失——这正是它默认无法启用的根本原因。我们来补上:

# 备份原文件 sudo cp /lib/systemd/system/rc-local.service /lib/systemd/system/rc-local.service.bak # 编辑服务定义,添加 Install 段 sudo sed -i '/\[Service\]/a [Install]\nWantedBy=multi-user.target\nAlias=rc-local.service' /lib/systemd/system/rc-local.service

关键点:WantedBy=multi-user.target表示该服务应在多用户模式(即标准命令行环境)启动后运行,这是绝大多数后台脚本的正确时机;Alias是为了兼容旧命令。

2.2 配置 /etc/rc.local 并赋予权限

创建或编辑/etc/rc.local

sudo tee /etc/rc.local << 'EOF' #!/bin/bash # /etc/rc.local - executed at the end of each multiuser runlevel # Make sure the script is executable and runs before exit. # Call our test script in background (critical!) /home/user/startup-test.sh & # Always exit with 0 to avoid boot hang exit 0 EOF # 必须赋权,否则 systemd 会拒绝执行 sudo chmod 755 /etc/rc.local

注意:末尾的&符号绝不能省!它让脚本在后台运行。若去掉,系统会卡在启动界面等待脚本结束(而我们的脚本没有退出逻辑),只能强制重启。

2.3 启用并验证

# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启用 rc-local 服务(开机自启) sudo systemctl enable rc-local # 立即启动一次,无需重启 sudo systemctl start rc-local # 检查状态 sudo systemctl status rc-local

状态应显示active (exited)。再看日志:

cat /tmp/startup-log.txt

如果看到新追加的记录,说明rc.local方案已通。这是最贴近传统 Linux 习惯的方式,适合快速验证和临时需求。

3. 方案二:systemd 用户级服务(无需 root,适合个人应用)

如果你只是想让自己的脚本在登录后自动运行(比如启动一个本地 Web 服务、监控工具),systemd 用户级服务是更干净的选择——它不污染系统全局配置,且由当前用户完全控制。

3.1 创建用户级 service 文件

# 创建 systemd 用户服务目录(若不存在) mkdir -p ~/.config/systemd/user/ # 创建服务定义文件 cat > ~/.config/systemd/user/startup-test.service << 'EOF' [Unit] Description=Startup Test Script (User Level) After=network.target [Service] Type=oneshot ExecStart=/home/user/startup-test.sh RemainAfterExit=yes [Install] WantedBy=default.target EOF

解释:Type=oneshot表示脚本执行完即退出(非守护进程);RemainAfterExit=yes告诉 systemd:即使脚本结束了,服务状态仍视为“活跃”,方便状态查询;default.target对应用户登录后的默认环境。

3.2 启用并启动

# 重新加载用户级 systemd 配置 systemctl --user daemon-reload # 启用(登录时自动启动) systemctl --user enable startup-test.service # 立即启动一次 systemctl --user start startup-test.service # 查看状态 systemctl --user status startup-test.service

成功后,cat /tmp/startup-log.txt会新增一条记录。下次你图形界面登录或 SSH 登录后,该脚本就会自动执行。

3.3 用户级 vs 系统级?何时选哪个?

  • 选用户级:脚本只为你自己服务、不依赖 root 权限、需要随登录启动(如 IDE 插件、个人备份脚本)
  • 选系统级:脚本需在无人登录时运行(如服务器 API、数据库)、需访问硬件设备、需 root 权限(如修改内核参数)

我们接下来就看系统级怎么搞。

4. 方案三:systemd 系统级服务(最规范,适合生产环境)

这是 Ubuntu 18.04 官方推荐的现代方式,配置一次,稳定可靠,且能被journalctl统一管理日志。

4.1 创建系统级 service 文件

# 创建服务文件到系统目录 sudo tee /etc/systemd/system/startup-test.service << 'EOF' [Unit] Description=Startup Test Script (System Level) After=multi-user.target Wants=multi-user.target [Service] Type=oneshot ExecStart=/home/user/startup-test.sh RemainAfterExit=yes User=user Group=user [Install] WantedBy=multi-user.target EOF

关键配置:User=userGroup=user指定以普通用户身份运行,避免脚本因 root 权限过高而失败(比如写入/tmp/时权限冲突);Wants=确保依赖关系明确。

4.2 启用并验证

# 重新加载全局 systemd 配置 sudo systemctl daemon-reload # 启用服务(开机自启) sudo systemctl enable startup-test.service # 立即启动 sudo systemctl start startup-test.service # 查看状态和实时日志 sudo systemctl status startup-test.service sudo journalctl -u startup-test.service -n 20 --no-pager

如果状态为active (exited),且日志中无报错,说明系统级服务已就绪。此时即使系统无人登录,只要启动到多用户模式,脚本就会执行。

4.3 三个方案对比总结

维度rc.local 方案systemd 用户级systemd 系统级
适用场景快速验证、兼容老脚本个人应用、登录后启动服务类程序、无人值守运行
配置复杂度中(需补 service 文件)低(仅一个文件)中(需指定 User/Group)
调试难度高(日志分散,易卡启动)低(systemctl --user命令统一)低(journalctl日志集中)
安全性中(以 root 运行,权限过大)高(仅当前用户权限)高(可精确指定运行用户)
Ubuntu 18.04 兼容性需手动修复原生支持原生支持

直接建议

  • 新项目、新服务 → 无脑选systemd 系统级(本文第4节)
  • 个人小工具、不想碰 sudo → 选systemd 用户级(本文第3节)
  • 临时调试、迁移老脚本 → 用rc.local(本文第2节),但务必加&exit 0

5. 常见问题与避坑指南(血泪经验)

这些不是理论假设,而是我们在 10+ 台 Ubuntu 18.04 虚拟机上踩出来的真坑。

5.1 重启后脚本没运行?先查这三处

  1. 权限是否到位?
    rc.local文件必须755,service 文件必须644,脚本本身必须755。用ls -l逐个确认。

  2. 路径是否绝对?
    systemd 中ExecStart必须写绝对路径~/startup-test.sh会失败,必须写/home/user/startup-test.sh

  3. 依赖是否满足?
    如果你的脚本需要网络,After=network.target是必须的;如果需要文件系统挂载,加After=local-fs.target。我们测试脚本不依赖这些,所以没加。

5.2 日志在哪看?别再瞎猜

  • rc.local输出:默认重定向到/var/log/syslog,用grep rc.local /var/log/syslog
  • systemd 用户级:journalctl --user -u startup-test.service
  • systemd 系统级:journalctl -u startup-test.service
  • 统一技巧:在脚本开头加exec > /tmp/script-debug.log 2>&1,所有输出都会进这个文件,排查最直观。

5.3 为什么我改了 service 文件,systemctl restart却没生效?

因为systemctl restart只重启服务,不重载配置。每次修改.service文件后,必须执行:

sudo systemctl daemon-reload # 重载配置 sudo systemctl restart startup-test.service # 再重启服务

漏掉第一句,等于白改。

6. 总结:Ubuntu 18.04 开机自启,其实很简单

回到最初的问题:“Ubuntu 18.04 开机自启难?”——难的不是技术本身,而是 Ubuntu 把启动管理权交给了更严谨但也更“啰嗦”的 systemd,而默认配置又留了个缺口。我们做的,不过是把那个缺口补上,然后选一条最顺的路走过去。

  • 你只需要记住一个测试脚本~/startup-test.sh,它是你验证一切的基石。
  • 你只需要掌握一种主力方案:对绝大多数人,systemd 系统级服务(第4节)就是最优解——它规范、可查、可维护,且一次配置,十年无忧。
  • 你只需要避开三个坑&符号、绝对路径、daemon-reload。填上它们,开机自启就再无玄学。

现在,关掉这篇博客,打开你的终端,用 5 分钟走一遍第4节的步骤。当你看到/tmp/startup-log.txt里出现第三条记录时,你就真正掌握了 Ubuntu 18.04 的开机自启。


获取更多AI镜像

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

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

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

相关文章

OWASP ASVS 自动化检查清单实践指南

从静态表格到持续集成的安全测试演进 一、ASVS 检查清单的核心价值 OWASP 应用安全验证标准&#xff08;ASVS&#xff09;为 Web 应用提供了分级安全要求框架。其 Level 1 基础清单涵盖 14 个关键领域&#xff1a; ‌架构设计‌&#xff08;V1&#xff09;‌认证与会话管理‌…

音乐自由新纪元:突破12种加密格式的全方位解密指南

音乐自由新纪元&#xff1a;突破12种加密格式的全方位解密指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https://…

3步解锁视频下载新体验:VK Video Downloader工具全攻略

3步解锁视频下载新体验&#xff1a;VK Video Downloader工具全攻略 【免费下载链接】VK-Video-Downloader Скачивайте видео с сайта ВКонтакте в желаемом качестве 项目地址: https://gitcode.com/gh_mirrors/vk/VK-Video-…

3步掌握零代码AI模型优化:MediaPipe Studio效率提升指南

3步掌握零代码AI模型优化&#xff1a;MediaPipe Studio效率提升指南 【免费下载链接】mediapipe Cross-platform, customizable ML solutions for live and streaming media. 项目地址: https://gitcode.com/gh_mirrors/me/mediapipe 你是否曾因AI模型调参繁琐而放弃优化…

ModEngine2 故障处理:7个核心问题的预防与解决方案

ModEngine2 故障处理&#xff1a;7个核心问题的预防与解决方案 【免费下载链接】ModEngine2 Runtime injection library for modding Souls games. WIP 项目地址: https://gitcode.com/gh_mirrors/mo/ModEngine2 ModEngine2作为魂系游戏模组加载的关键工具&#xff0c;其…

2026年评价高的工业废气处理/陕西废气处理工程厂家最新权威实力榜

在工业环保领域,选择一家技术实力雄厚、项目经验丰富且服务可靠的废气处理工程厂家至关重要。本文基于企业技术研发能力、项目案例积累、客户口碑评价及行业影响力等多维度指标,对陕西地区工业废气处理工程服务商进行…

[Linux]学习笔记系列 -- [fs]exec - 教程

[Linux]学习笔记系列 -- [fs]exec - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

2026年评价高的耐低温PET片/吸塑PET片厂家最新推荐权威榜

在塑料包装和工业材料领域,耐低温PET片和吸塑PET片因其优异的性能而备受青睐。本文基于2026年行业数据,从企业规模、技术实力、产品质量、客户评价及售后服务五个维度,对国内耐低温PET片/吸塑PET片生产厂家进行客观…

解锁Windows定制新境界:Windhawk个性化工具深度探索

解锁Windows定制新境界&#xff1a;Windhawk个性化工具深度探索 【免费下载链接】windhawk The customization marketplace for Windows programs: https://windhawk.net/ 项目地址: https://gitcode.com/gh_mirrors/wi/windhawk 你是否曾想过让Windows系统真正为自己服…

免费玩转Gemma 3:270M模型Unsloth训练教程

免费玩转Gemma 3&#xff1a;270M模型Unsloth训练教程 【免费下载链接】gemma-3-270m-it-qat-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/gemma-3-270m-it-qat-GGUF 导语 Google最新发布的Gemma 3系列模型凭借轻量级设计与高性能表现引发行业关注&…

三步打造高效知识管理系统:Light Reading Cloud的知识工作者效率解决方案

三步打造高效知识管理系统&#xff1a;Light Reading Cloud的知识工作者效率解决方案 【免费下载链接】light-reading-cloud :books: 轻松阅读&#xff0c;基于SpringCloud生态开发的阅读类APP微服务实战项目&#xff0c;涉及 SpringCloud-Gateway、Nacos、OpenFeign、Hystrix…

4个核心技巧:用TRL强化学习实现大模型对齐与PPO优化

4个核心技巧&#xff1a;用TRL强化学习实现大模型对齐与PPO优化 【免费下载链接】trl 项目地址: https://gitcode.com/gh_mirrors/trl/trl TRL&#xff08;Transformer Reinforcement Learning&#xff09;是实现大模型对齐的关键工具库&#xff0c;通过强化学习技术栈…

YOLOv9官方镜像使用全解析,新手避坑必备手册

YOLOv9官方镜像使用全解析&#xff0c;新手避坑必备手册 YOLOv9刚发布就引发目标检测圈热议——不是因为它又卷出了新精度&#xff0c;而是它用“可编程梯度信息”这个全新思路&#xff0c;重新定义了模型如何从数据中学习真正重要的特征。但再惊艳的算法&#xff0c;也得先跑…

3大核心功能让你成为AI背景移除大师:革命性图像处理实战指南

3大核心功能让你成为AI背景移除大师&#xff1a;革命性图像处理实战指南 【免费下载链接】rembg Rembg is a tool to remove images background 项目地址: https://gitcode.com/GitHub_Trending/re/rembg 在当今视觉内容主导的时代&#xff0c;图像处理已成为不可或缺的…

解锁边缘AI:5个维度掌握微控制器机器学习部署

解锁边缘AI&#xff1a;5个维度掌握微控制器机器学习部署 【免费下载链接】tflite-micro Infrastructure to enable deployment of ML models to low-power resource-constrained embedded targets (including microcontrollers and digital signal processors). 项目地址: h…

RePKG完全掌握指南:从入门到高级应用的探索之旅

RePKG完全掌握指南&#xff1a;从入门到高级应用的探索之旅 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾因无法提取Wallpaper Engine壁纸资源而束手无策&#xff1f;是否…

如何通过AI技术高效获取B站硬核会员资格

如何通过AI技术高效获取B站硬核会员资格 【免费下载链接】bili-hardcore bilibili 硬核会员 AI 自动答题&#xff0c;直接调用 B 站 API&#xff0c;非 OCR 实现 项目地址: https://gitcode.com/gh_mirrors/bi/bili-hardcore 副标题&#xff1a;基于本地大模型的智能答题…

手把手教学:如何用 ms-swift 微调 Qwen2.5-7B

手把手教学&#xff1a;如何用 ms-swift 微调 Qwen2.5-7B 1. 为什么这次微调特别适合新手上手&#xff1f; 你可能已经看过不少大模型微调教程——动辄需要多卡A100、配置复杂环境、等待数小时训练&#xff0c;最后还容易在某个环节报错卡住。而今天这篇教程完全不同&#xf…

企业级架构解决方案:现代化开发框架的深度剖析与实践验证

企业级架构解决方案&#xff1a;现代化开发框架的深度剖析与实践验证 【免费下载链接】abp-vnext-pro Abp Vnext 的 Vue 实现版本 项目地址: https://gitcode.com/gh_mirrors/ab/abp-vnext-pro 1. 企业开发核心矛盾分析 1.1 效率与质量的二元对立 在企业级应用开发过程…

5个高效解决方案:零基础手机视频合并完整指南

5个高效解决方案&#xff1a;零基础手机视频合并完整指南 【免费下载链接】BilibiliCacheVideoMerge 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliCacheVideoMerge 副标题&#xff1a;告别视频分割烦恼&#xff0c;手机端轻松搞定完整视频制作 你是否遇到过…