news 2026/4/3 5:38:46

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/2 6:21:55

AnimeGANv2移动端适配:云端API对接,APP集成无忧

AnimeGANv2移动端适配:云端API对接,APP集成无忧 你是不是也遇到过这样的问题?作为移动开发者,想在自己的安卓APP里加入“一键漫画化”功能,让用户上传照片就能生成宫崎骏或新海诚风格的动漫头像。听起来很酷&#xff…

作者头像 李华
网站建设 2026/4/1 19:51:44

RTSP流媒体技术终极指南:从原理到实战的完整解决方案

RTSP流媒体技术终极指南:从原理到实战的完整解决方案 【免费下载链接】RtspServer RTSP Server , RTSP Pusher 项目地址: https://gitcode.com/gh_mirrors/rt/RtspServer 在当今数字化时代,RTSP流媒体技术已成为实时传输领域的核心技术支撑。无论…

作者头像 李华
网站建设 2026/3/13 5:14:00

AI印象派艺术工坊实战案例:企业宣传图快速艺术化部署详细步骤

AI印象派艺术工坊实战案例:企业宣传图快速艺术化部署详细步骤 1. 业务场景与需求分析 在现代企业品牌建设和数字营销中,视觉内容的质量直接影响用户的第一印象。传统的宣传图设计依赖专业设计师进行后期处理,耗时长、成本高,难以…

作者头像 李华
网站建设 2026/3/23 17:33:04

【目录】AgentScope-Java 深入浅出教程

前言 目标读者:Java 开发者、AI 应用开发者、企业级应用架构师 学习目标:掌握 AgentScope-Java 框架,能够构建生产级 AI 智能体应用 阅读建议:循序渐进,配合代码实践 第一部分:框架概述与快速入门 第1章 AgentScope-Java 简介 1.1 什么是 AgentScope-Java 面向智能体的…

作者头像 李华
网站建设 2026/3/30 23:30:38

无FPU环境下STM32浮点转换优化策略

无FPU的STM32上,如何让浮点运算快如闪电?你有没有遇到过这种情况:在STM32F1或STM32L4这类没有硬件浮点单元(FPU)的芯片上跑一段看似简单的浮点代码,结果系统卡顿、响应延迟,甚至错过关键中断&am…

作者头像 李华
网站建设 2026/3/28 3:46:45

《AgentScope-Java 深入浅出教程》第3章 消息系统(Message)

本章目标:深入理解 AgentScope 的消息系统,掌握消息的构建、内容块类型和响应处理 3.1 消息系统概述 3.1.1 消息的重要性 在 AgentScope 中,消息(Msg) 是最核心的数据结构。它承担着多重职责: ┌──────────────────────────────────…

作者头像 李华