news 2026/4/18 12:05:27

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/18 2:07:14

3大核心功能解密:VideoCaptioner如何让字幕制作效率提升12倍

3大核心功能解密:VideoCaptioner如何让字幕制作效率提升12倍 【免费下载链接】VideoCaptioner 🎬 卡卡字幕助手 | VideoCaptioner - 基于 LLM 的智能字幕助手,无需GPU一键高质量字幕视频合成!视频字幕生成、断句、校正、字幕翻译全…

作者头像 李华
网站建设 2026/4/18 3:51:51

Chrome密码提取实战:3大方法找回遗忘的登录凭据

Chrome密码提取实战:3大方法找回遗忘的登录凭据 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 你是否曾在需要登录某个重要网站时,突然发现自己忘记了密…

作者头像 李华
网站建设 2026/4/18 3:52:49

体验AI音乐创作入门:NotaGen云端按需付费成主流

体验AI音乐创作入门:NotaGen云端按需付费成主流 你是不是也遇到过这样的情况?想转行做音乐编曲,打开招聘网站一看,很多岗位都写着“熟悉AI音乐生成工具者优先”。心里一紧:这年头连写歌都要会AI了?可刚准备…

作者头像 李华
网站建设 2026/4/18 0:06:04

小白也能懂:Qwen3-Embedding-4B文本嵌入入门指南

小白也能懂:Qwen3-Embedding-4B文本嵌入入门指南 1. 引言:为什么你需要了解 Qwen3-Embedding-4B? 在当前人工智能应用快速落地的背景下,检索增强生成(RAG)系统、智能客服、代码搜索和多语言内容理解等场景…

作者头像 李华
网站建设 2026/4/17 19:04:48

抖音去水印下载神器:一键批量获取用户完整作品库

抖音去水印下载神器:一键批量获取用户完整作品库 【免费下载链接】TikTokDownload 抖音去水印批量下载用户主页作品、喜欢、收藏、图文、音频 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokDownload 还在为抖音视频的水印问题烦恼吗?想要批…

作者头像 李华
网站建设 2026/4/18 3:52:15

DeepSeek-R1-Distill-Qwen-1.5B物流场景:运单信息提取系统搭建

DeepSeek-R1-Distill-Qwen-1.5B物流场景:运单信息提取系统搭建 1. 引言:轻量级大模型在物流自动化中的价值 随着智能物流系统的快速发展,运单信息的自动提取成为提升仓储、分拣和配送效率的关键环节。传统OCR结合规则模板的方式在面对格式多…

作者头像 李华