news 2026/8/29 10:26:12

简单实用!Ubuntu下实现脚本开机自启的最佳方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单实用!Ubuntu下实现脚本开机自启的最佳方式

简单实用!Ubuntu下实现脚本开机自启的最佳方式

在日常使用Ubuntu系统的过程中,我们经常会遇到一些需要自动执行的任务——比如启动某个监控程序、运行后台服务、或者执行环境初始化脚本。如果每次都要手动操作,不仅麻烦还容易遗漏。有没有一种简单、稳定、通用性强的方法,让我们的自定义脚本随系统开机自动运行?

答案是肯定的:通过systemd 服务机制,我们可以轻松实现脚本的开机自启。这种方法适用于所有现代版本的 Ubuntu(16.04 及以上),无需图形界面依赖,也不受用户登录状态影响,是目前最推荐的方案。

本文将手把手带你完成整个配置过程,从编写脚本到注册服务,每一步都清晰明了,小白也能一次成功。


1. 理解核心原理:为什么用 systemd?

在 Linux 系统中,systemd是默认的系统和服务管理器,负责控制系统的启动流程和后台服务的运行。它比传统的rc.local或桌面级“启动应用程序”更加底层、可靠,并且支持开机前网络就绪、权限控制、日志追踪等高级功能。

我们要做的,就是创建一个自定义的 systemd 服务单元文件(.service),告诉系统:“请在我开机时自动运行这个脚本”。

这种方式的优势非常明显:

  • 不依赖用户是否登录
  • 支持任意路径和权限运行
  • 可设置依赖项(如等待网络就绪)
  • 可通过 systemctl 查看状态、重启或禁用
  • 适用于服务器和桌面环境

2. 准备你的启动脚本

首先,你需要有一个想要开机运行的脚本。为了演示方便,我们来写一个简单的测试脚本。

### 2.1 创建测试脚本 test.sh

打开终端,执行以下命令创建脚本文件:

nano /home/Ubuntu/Desktop/test.sh

输入以下内容:

#!/bin/bash echo "这是一个开机自启动的测试程序,当前时间:$(date)" >> /home/Ubuntu/Desktop/test.log

保存并退出(Ctrl+O → Enter → Ctrl+X)。

### 2.2 给脚本添加可执行权限

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

这一步非常重要,否则系统无法执行该脚本。

此时你可以手动运行一次看看效果:

/home/Ubuntu/Desktop/test.sh cat /home/Ubuntu/Desktop/test.log

你应该能看到类似输出:

这是一个开机自启动的测试程序,当前时间:Mon Apr 5 10:20:30 CST 2025

说明脚本工作正常。


3. 编写 systemd 服务文件

接下来,我们要创建一个.service文件,用来定义如何运行这个脚本。

### 3.1 创建 AutoRun.service 文件

在本地创建服务文件:

nano ~/AutoRun.service

粘贴以下内容:

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

### 3.2 配置说明(小白也能懂)

配置项含义
Description服务描述,便于识别
After=network.target表示等网络准备好后再启动,适合需要联网的脚本
User=root指定以 root 用户身份运行(可根据需要改为普通用户)
WorkingDirectory脚本所在的工作目录
ExecStart实际要执行的命令,必须使用绝对路径
Restart=on-failure如果脚本异常退出,自动重试一次
RestartSec=10重试前等待 10 秒
WantedBy=multi-user.target表示在多用户模式下启用(标准开机模式)

重要提示:所有路径必须使用绝对路径,相对路径会导致服务启动失败!


4. 安装并启用服务

现在我们将服务文件安装到系统目录,并激活它。

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

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

### 4.2 设置文件权限(可选但推荐)

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

确保服务文件权限正确,避免加载失败。

### 4.3 重新加载 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 手动启动服务(立即生效)

如果你想马上测试,不需要重启电脑:

sudo systemctl start AutoRun.service

检查是否成功执行:

cat /home/Ubuntu/Desktop/test.log

应该能看到新的时间记录被写入。

### 5.2 查看服务运行状态

sudo systemctl status AutoRun.service

正常状态下会显示active (running)exited(如果是短时任务),并且没有报错信息。

### 5.3 重启系统验证自启

最可靠的验证方式是重启:

sudo reboot

系统重启后,再次查看日志文件:

cat /home/Ubuntu/Desktop/test.log

你会发现又新增了一条带时间戳的记录,证明脚本确实随着系统启动自动执行了!


6. 常见问题与解决方案

尽管这套方法非常稳定,但在实际操作中仍可能遇到一些小问题。以下是几个常见情况及应对策略。

### 6.1 脚本没执行?检查路径和权限!

最常见的问题是路径错误或权限不足。

  • ✅ 确保ExecStart使用的是绝对路径
  • ✅ 确保脚本本身有执行权限:chmod +x your_script.sh
  • ✅ 确保目标用户(如 root)能访问脚本路径

### 6.2 日志写入失败?检查目录归属

如果你的日志路径/home/xxx/Desktop/属于普通用户,而服务以root运行,通常没问题;但如果反过来,User=yourname却要写入 root 目录,则会失败。

建议:

  • 将日志写入/tmp//var/log/等公共目录
  • 或者统一使用同一用户运行服务

例如修改为:

User=Ubuntu Group=Ubuntu

### 6.3 服务无法启用?检查拼写和语法

.service文件对格式敏感,尤其是空格和换行。

建议使用systemd-analyze verify工具检查:

sudo systemd-analyze verify /etc/systemd/system/AutoRun.service

如果有错误,会明确指出哪一行有问题。

### 6.4 如何临时关闭服务?

如果你暂时不想让它运行,可以停用:

sudo systemctl stop AutoRun.service # 立即停止 sudo systemctl disable AutoRun.service # 取消开机启动

以后想恢复,再执行enable即可。


7. 进阶技巧:更多实用场景扩展

掌握了基本方法后,你可以将其应用到各种真实场景中。

### 7.1 场景一:开机自动启动 Python 服务

假设你有一个 Flask 应用:

ExecStart=/usr/bin/python3 /home/Ubuntu/myapp/app.py

只要保证 Python 环境可用,就能实现 Web 服务开机自启。

### 7.2 场景二:定时唤醒后继续运行(配合休眠)

有些设备需要在从休眠(Suspend)恢复后重新执行某些动作。除了开机自启,还可以结合Resume事件触发。

参考思路:使用systemdsuspend@.service或编写 udev 规则监听电源事件。

更多细节可参考延伸文章:Ubuntu系统休眠唤醒后【Suspend】自启动程序脚本

### 7.3 场景三:批量部署脚本服务(运维适用)

对于多台机器管理,可以把.service文件和脚本打包成 shell 安装脚本,一键部署:

#!/bin/bash cp AutoRun.service /etc/systemd/system/ cp test.sh /home/Ubuntu/Desktop/ chmod +x /home/Ubuntu/Desktop/test.sh systemctl daemon-reload systemctl enable AutoRun.service echo "开机自启服务安装完成!"

极大提升效率。


8. 总结

通过本文的学习,你应该已经掌握了在 Ubuntu 系统下实现脚本开机自启的最佳实践方法。总结一下关键步骤:

  1. ✅ 编写你要运行的脚本,并赋予执行权限
  2. ✅ 创建.service服务文件,填写正确的路径和参数
  3. ✅ 将服务复制到/etc/systemd/system/目录
  4. ✅ 执行daemon-reloadenable服务
  5. ✅ 重启验证,确保一切正常

这套方案简洁、高效、兼容性好,无论是个人使用还是企业部署都非常合适。


获取更多AI镜像

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

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

SGLang与Llama.cpp对比:轻量化部署性能评测教程

SGLang与Llama.cpp对比:轻量化部署性能评测教程 1. 轻量化推理框架的现实需求 在当前大模型快速发展的背景下,如何将高性能语言模型高效部署到有限资源环境中,成为开发者和企业关注的核心问题。尤其是在边缘设备、本地服务器或成本敏感型项…

作者头像 李华
网站建设 2026/8/21 17:01:02

1小时搭建DATAX下载原型:快速验证你的想法

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个最小可行DATAX下载原型,功能包括:1. 简单配置即可连接数据源;2. 基础数据下载功能;3. 下载状态实时反馈;4. 结果…

作者头像 李华
网站建设 2026/8/29 5:51:33

cv_resnet18_ocr-detection使用避坑指南,少走弯路

cv_resnet18_ocr-detection使用避坑指南,少走弯路 在实际项目中使用 cv_resnet18_ocr-detection 这类OCR文字检测模型时,看似简单的WebUI操作背后其实隐藏了不少“坑”。很多新手用户在部署、调参、训练和导出模型时常常遇到服务起不来、检测不准、训练…

作者头像 李华
网站建设 2026/8/25 2:14:30

GPT-OSS-20B输出后处理:结果过滤与增强

GPT-OSS-20B输出后处理:结果过滤与增强 你是否在使用GPT-OSS-20B这类大模型时,发现生成的内容虽然丰富,但偶尔夹杂冗余、重复甚至逻辑混乱的句子?尤其是在通过网页界面进行推理时,原始输出往往不能直接用于生产环境。…

作者头像 李华
网站建设 2026/8/27 8:19:47

Glyph应用场景揭秘:不只是AI绘画那么简单

Glyph应用场景揭秘:不只是AI绘画那么简单 1. 引言:当“看书”变成“看图” 你有没有想过,让大模型理解一本几十万字的小说,其实可以像翻相册一样简单? 这不是科幻。智谱推出的 Glyph 视觉推理大模型,正在…

作者头像 李华
网站建设 2026/8/27 3:46:40

【OpenCode】开源AI编码代理的核心架构、特性与实战指南

文章目录 目录一、引言二、OpenCode 核心技术解析2.1 核心架构:四层分布式设计2.2 技术栈选择:为何放弃Node.js,拥抱Bun?2.3 十大核心系统:模块化设计的艺术 三、OpenCode 关键特性:终端开发者的核心痛点解…

作者头像 李华