news 2026/4/16 16:53:34

Ubuntu开机自启原来这么简单,测试脚本亲测可用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu开机自启原来这么简单,测试脚本亲测可用

Ubuntu开机自启原来这么简单,测试脚本亲测可用

1. 引言

在实际的Linux系统运维和开发过程中,经常会遇到需要让某些程序或脚本在系统启动时自动运行的需求。例如,后台服务守护、环境初始化、日志监控等场景都可能依赖开机自启功能。

虽然Ubuntu提供了多种实现方式(如rc.local、cron@reboot、桌面启动项等),但这些方法存在兼容性差、依赖层级不明确、权限问题多等弊端。尤其在较新版本的Ubuntu(基于systemd)中,最稳定、通用且推荐的方式是使用systemd服务单元(.service文件)

本文将详细介绍如何通过创建一个systemd服务来实现脚本的开机自启动,并提供完整可验证的测试案例,所有步骤均经过实机验证,适用于Ubuntu 18.04及以上版本。

2. 核心原理:systemd服务机制

2.1 什么是systemd?

systemd是现代Linux发行版中广泛采用的系统和服务管理器,负责操作系统启动过程中的服务初始化、依赖管理、资源控制等任务。它取代了传统的SysVinit系统,具备更快的启动速度和更强的服务控制能力。

每个需要被管理系统生命周期的程序都可以定义为一个.service单元文件,放置在特定目录下后,即可通过systemctl命令进行启用、禁用、启动、停止等操作。

2.2 开机自启的工作流程

当Ubuntu系统启动时:

  1. 内核加载完成后,第一个用户空间进程就是/sbin/init,它指向systemd
  2. systemd 读取默认目标(target),通常是multi-user.targetgraphical.target
  3. 所有标记为WantedBy=multi-user.target的服务都会被加载并按需启动。
  4. 如果某个服务设置了enable,则会在下次开机时自动执行其ExecStart指令。

因此,我们只需编写一个符合规范的.service文件,并将其注册到systemd系统中,就能实现任意脚本的开机自启。

提示:除了开机启动外,该机制也适用于休眠唤醒后的自动恢复场景。更多关于Suspend唤醒自启的内容可参考相关技术文档。

3. 编写开机启动服务文件

3.1 创建 AutoRun.service 文件

在任意工作目录下创建名为AutoRun.service的文本文件,内容如下:

[Unit] Description=AutoRun-Service After=network.target [Service] Type=simple User=root WorkingDirectory=/home/Ubuntu/Desktop ExecStart=/home/Ubuntu/Desktop/test.sh start Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target

3.2 关键参数解析

字段说明
Description服务描述信息,便于识别用途
After=network.target表示该服务在网络就绪之后再启动,适合依赖网络的操作
Type=simple默认类型,表示主进程由ExecStart直接启动
User=root指定以 root 用户身份运行(可根据需求改为普通用户)
WorkingDirectory设置脚本执行时的工作路径(必须使用绝对路径)
ExecStart指定要执行的命令或脚本(必须使用绝对路径)
Restart=on-failure当程序异常退出时自动重启,增强稳定性
RestartSec=5重启前等待5秒
WantedBy=multi-user.target表明该服务属于多用户模式下的启动集合

重要提醒:所有路径必须使用绝对路径,相对路径会导致服务无法找到文件而失败。

4. 部署与配置服务

4.1 将服务文件复制到系统目录

打开终端,执行以下命令(需具有sudo权限):

sudo cp AutoRun.service /etc/systemd/system/

注意:原始参考内容中路径写为/etc/systemed/system,这是拼写错误,正确路径应为/etc/systemd/system

4.2 设置文件权限

确保服务文件具有正确的读写权限:

sudo chmod 644 /etc/systemd/system/AutoRun.service

推荐权限为644(即-rw-r--r--),避免因权限过高引发安全警告。

4.3 重新加载systemd配置

每次新增或修改服务文件后,必须通知systemd重新加载配置:

sudo systemctl daemon-reload

4.4 启用开机自启

启用该服务,使其在系统启动时自动运行:

sudo systemctl enable AutoRun.service

执行成功后会输出类似:

Created symlink /etc/systemd/system/multi-user.target.wants/AutoRun.service → /etc/systemd/system/AutoRun.service.

这表明已创建软链接,服务已被纳入开机启动列表。

5. 编写测试脚本并验证功能

5.1 创建 test.sh 测试脚本

在桌面上创建test.sh脚本文件,内容如下:

#!/bin/bash # 定义日志输出路径 LOG_FILE="/home/Ubuntu/Desktop/test.log" # 获取当前时间戳 TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') # 判断是否传入了 start 参数 if [ "$1" = "start" ]; then echo "[$TIMESTAMP] 系统已启动,这是一个开机自启动的测试程序。" >> "$LOG_FILE" else echo "[$TIMESTAMP] 脚本被手动调用,参数为: $*" >> "$LOG_FILE" fi

5.2 设置脚本可执行权限

chmod +x /home/Ubuntu/Desktop/test.sh

否则systemd将无法执行该脚本。

5.3 手动测试脚本运行

可先手动运行一次脚本,确认其功能正常:

/home/Ubuntu/Desktop/test.sh start

检查桌面是否生成test.log文件,并包含正确的时间戳记录。

6. 验证开机自启效果

6.1 重启系统

sudo reboot

6.2 登录后检查日志

系统重启后登录账户,查看桌面的test.log文件内容:

cat ~/Desktop/test.log

预期输出示例:

[2025-04-05 10:23:15] 系统已启动,这是一个开机自启动的测试程序。

如果能看到带时间戳的记录,说明服务已成功在开机时触发执行。

6.3 查看服务状态(可选)

可通过以下命令查看服务运行状态:

systemctl status AutoRun.service

正常状态下应显示active (running)exited(一次性任务),无报错信息。

7. 常见问题与解决方案

7.1 日志未生成或路径错误

  • 原因:脚本中使用的路径不是绝对路径,或目标目录无写入权限。
  • 解决:确保LOG_FILE使用完整绝对路径,且目标目录对运行用户(如root)可写。

7.2 权限不足导致服务失败

  • 现象systemctl status显示Permission denied
  • 解决
  • 确保.service文件权限为644
  • 确保目标脚本有执行权限(chmod +x
  • 若涉及GUI操作,考虑切换用户上下文(需额外配置)

7.3 服务未启用或未加载

  • 现象:重启后无反应
  • 排查步骤
  • 检查是否执行了systemctl enable
  • 检查是否执行了daemon-reload
  • 检查/etc/systemd/system/multi-user.target.wants/目录下是否有对应软链接

7.4 脚本依赖环境变量缺失

  • 现象:脚本在终端能运行,但在服务中失败
  • 原因:systemd服务环境变量有限,不同于用户登录shell
  • 解决:在.service文件中显式设置环境变量,例如:
[Service] Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"

8. 总结

通过本文介绍的方法,我们可以高效、可靠地实现Ubuntu系统的开机自启功能。相比其他方式,基于systemd的服务机制具有以下显著优势:

  1. 标准化:符合现代Linux系统的设计规范,兼容性强;
  2. 可控性高:支持启动顺序、依赖管理、自动重启等功能;
  3. 易于维护:可通过systemctl统一管理服务状态;
  4. 安全性好:可指定运行用户、限制权限,降低风险。

只要遵循“编写.service文件 → 复制到systemd目录 → 加载并启用”的三步流程,再配合正确的路径和权限设置,即可轻松完成任意脚本或程序的开机自启配置。


获取更多AI镜像

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

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

《AgentScope-Java 深入浅出教程》第1章 AgentScope-Java 简介

本章目标:了解 AgentScope-Java 是什么、能做什么、为什么选择它 1.1 什么是 AgentScope-Java 1.1.1 框架定位 AgentScope-Java 是一个面向智能体的编程框架,专门用于构建基于大语言模型(LLM)的 AI 应用程序。 ┌───────────────────────────…

作者头像 李华
网站建设 2026/4/16 11:13:39

1.8B vs 7B怎么选?HY-MT1.5云端AB测试指南

1.8B vs 7B怎么选?HY-MT1.5云端AB测试指南 你是不是也遇到过这样的难题:团队要上线一个翻译功能,技术主管拿不定主意——到底该用轻量的 HY-MT1.5-1.8B 还是效果更强的 HY-MT1.5-7B? 直接拍脑袋选风险太大,部署错了不…

作者头像 李华
网站建设 2026/4/16 11:12:40

抖音数据采集系统深度解析:从接口调用到批量处理完整指南

抖音数据采集系统深度解析:从接口调用到批量处理完整指南 【免费下载链接】TikTokDownload 抖音去水印批量下载用户主页作品、喜欢、收藏、图文、音频 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokDownload 在数字化内容创作时代,抖音平台…

作者头像 李华
网站建设 2026/4/15 21:23:26

ZeroBrane Studio:重塑Lua开发体验的智能编程平台

ZeroBrane Studio:重塑Lua开发体验的智能编程平台 【免费下载链接】ZeroBraneStudio Lightweight Lua-based IDE for Lua with code completion, syntax highlighting, live coding, remote debugger, and code analyzer; supports Lua 5.1, 5.2, 5.3, 5.4, LuaJIT …

作者头像 李华
网站建设 2026/4/16 10:57:58

PaddleOCR-VL镜像推荐:0配置体验109种语言识别

PaddleOCR-VL镜像推荐:0配置体验109种语言识别 你是不是也遇到过这样的情况?做跨境电商运营时,每天要处理来自不同国家的商品标签、说明书、包装信息,语言五花八门——西班牙语、泰语、俄语、阿拉伯语……市面上常见的OCR工具一碰…

作者头像 李华
网站建设 2026/4/16 12:31:25

AWPortrait-Z商业案例:某电商平台人像优化项目复盘

AWPortrait-Z商业案例:某电商平台人像优化项目复盘 1. 项目背景与业务需求 1.1 行业痛点分析 在电商领域,商品主图尤其是人物模特展示图的质量直接影响转化率。传统摄影流程存在成本高、周期长、风格不统一等问题。某头部服饰类电商平台面临以下核心挑…

作者头像 李华