news 2026/4/16 17:15:01

5分钟搞定开机自启脚本,Ubuntu部署自动化就这么简单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5分钟搞定开机自启脚本,Ubuntu部署自动化就这么简单

5分钟搞定开机自启脚本,Ubuntu部署自动化就这么简单

1. 引言:为什么需要开机自启脚本?

在实际的服务器运维、嵌入式设备部署或本地开发环境中,我们常常希望某些服务或脚本能够在系统启动时自动运行,而无需手动登录执行。例如:

  • 自动启动Web服务(如Flask、Node.js应用)
  • 启动数据采集程序
  • 挂载特定目录或配置网络环境

传统的做法是每次重启后手动执行命令,效率低且容易遗漏。通过配置开机自启脚本,我们可以实现系统的自动化初始化流程,大幅提升部署效率和稳定性。

本文将带你使用最简洁的方式,在Ubuntu系统中快速配置一个开机自动执行的Shell脚本,全程不超过5分钟,适用于Ubuntu 18.04及以上版本(包括使用systemd的新版系统)。


2. 方案选型:rc.local 还是 systemd?

2.1 两种主流方式对比

对比维度rc.local 方式systemd 服务方式
配置复杂度简单,适合初学者稍复杂,需编写服务单元文件
执行时机多用户模式末尾可精细控制(网络就绪后等)
兼容性Ubuntu 16.04~20.04 支持所有现代Linux发行版通用
日志追踪不易排查错误支持journalctl查看详细日志
推荐程度⭐⭐☆⭐⭐⭐⭐☆

结论:虽然rc.local方法简单直观,但systemd 是当前推荐的标准方式,具备更好的可控性和可维护性。

但由于部分用户仍习惯使用rc.local,本文将先介绍其配置方法,再重点讲解更优的systemd实现方案。


3. 方法一:使用 rc.local 实现开机启动(兼容旧版本)

3.1 创建自定义启动脚本

首先创建一个用于测试的Shell脚本,路径可自定义,例如:

mkdir -p /home/user/scripts nano /home/user/scripts/auto_run_test.sh

写入以下内容:

#!/bin/bash # 输出时间戳到日志文件 echo "Script started at $(date)" > /home/user/scripts/output.txt # 进入目标项目目录 cd /home/user/mywbc_v5_usb/build || exit 1 # 记录进入目录状态 echo "Entered build directory" >> /home/user/scripts/output.txt # 启动模拟程序(示例) ./sim/sim & # 标记完成 echo "Simulation launched" >> /home/user/scripts/output.txt

3.2 赋予脚本可执行权限

sudo chmod +x /home/user/scripts/auto_run_test.sh

建议使用+x而非777,避免过度开放权限,符合最小权限原则。

3.3 启用 rc.local(如未启用)

Ubuntu 20.04+ 默认可能未启用rc.local,需手动激活:

  1. 编辑/etc/rc.local文件:
sudo nano /etc/rc.local

确保内容如下(若不存在则新建):

#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # Your commands here /home/user/scripts/auto_run_test.sh exit 0
  1. 设置rc.local可执行:
sudo chmod +x /etc/rc.local
  1. 启用rc-local服务:
sudo systemctl enable rc-local sudo systemctl start rc-local
  1. 检查状态:
sudo systemctl status rc-local

如果看到active (exited)表示已成功加载。


4. 方法二:使用 systemd 服务(推荐方案)

4.1 为什么选择 systemd?

  • 更标准的 Linux 初始化系统
  • 支持依赖管理(如等待网络就绪)
  • 提供日志记录与进程监控
  • 支持失败重试、超时控制等高级功能

4.2 创建 systemd 服务单元文件

创建服务配置文件:

sudo nano /etc/systemd/system/auto-startup.service

写入以下内容:

[Unit] Description=Auto Run Startup Script After=multi-user.target network-online.target Wants=network-online.target [Service] Type=simple User=user WorkingDirectory=/home/user/mywbc_v5_usb/build ExecStart=/home/user/scripts/auto_run_test.sh Restart=no StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
参数说明:
  • After=...: 确保在网络就绪后再执行
  • User=user: 替换为实际用户名,避免以 root 身份运行
  • WorkingDirectory: 指定工作目录
  • ExecStart: 脚本完整路径
  • Restart=no: 不自动重启(根据需求可设为on-failure
  • StandardOutput/Error=journal: 输出日志可通过journalctl查看

4.3 启用并测试服务

  1. 重新加载 systemd 配置:
sudo systemctl daemon-reexec sudo systemctl daemon-reload
  1. 启用开机自启:
sudo systemctl enable auto-startup.service
  1. 手动启动测试:
sudo systemctl start auto-startup.service
  1. 查看执行结果:
sudo journalctl -u auto-startup.service --since "5 minutes ago"

你应该能看到类似输出:

May 10 10:00:01 ubuntu systemd[1]: Started Auto Run Startup Script. May 10 10:00:01 ubuntu auto_run_test.sh[1234]: Script started at Fri May 10 10:00:01 UTC 2025
  1. 重启验证:
sudo reboot

重启后检查/home/user/scripts/output.txt是否生成,确认脚本正常执行。


5. 常见问题与避坑指南

5.1 脚本不执行?检查这些点!

问题现象可能原因解决方案
脚本无输出权限不足或路径错误使用绝对路径,检查chmod +x
cd 失败工作目录不存在或拼写错误添加 `
程序启动后立即退出缺少后台运行符号&在长时任务后加&
依赖服务未就绪(如数据库)启动过早[Unit]中添加After=...
日志显示 Permission denied用户权限不匹配确保User=字段正确

5.2 安全建议

  • ❌ 避免使用chmod 777,应使用chmod +x
  • ❌ 不要以root身份运行普通脚本(除非必要)
  • ✅ 使用journalctl替代日志文件调试
  • ✅ 在脚本开头添加set -e,出错即终止:
#!/bin/bash set -e # 出错立即退出

6. 总结

6.1 核心要点回顾

  1. rc.local 方式:适用于老版本Ubuntu,操作简单但功能有限,适合快速验证。
  2. systemd 服务方式:现代Linux标准,支持精细化控制,推荐用于生产环境。
  3. 权限管理:始终遵循最小权限原则,避免使用777
  4. 日志排查:善用journalctl -u <service>快速定位问题。
  5. 路径规范:脚本中尽量使用绝对路径,防止因工作目录不同导致失败。

6.2 最佳实践建议

  • 📌优先使用 systemd:它是未来趋势,功能强大且稳定。
  • 📌命名清晰:服务名和脚本名保持一致,便于维护。
  • 📌日志跟踪:开启StandardOutput=journal,方便后期调试。
  • 📌自动化测试:每次修改后通过reboot验证是否真正生效。

掌握这两种方法后,你可以在不同场景下灵活选择最适合的开机启动方案,无论是个人项目还是企业级部署,都能轻松应对。


获取更多AI镜像

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

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

一键启动语音合成:CosyVoice-300M Lite开箱即用指南

一键启动语音合成&#xff1a;CosyVoice-300M Lite开箱即用指南 1. 引言 在语音合成&#xff08;Text-to-Speech, TTS&#xff09;技术快速发展的今天&#xff0c;如何在资源受限的环境中实现高质量、低延迟的语音生成&#xff0c;成为开发者关注的核心问题。传统的TTS模型往…

作者头像 李华
网站建设 2026/4/15 22:31:19

FST ITN-ZH数据可视化:文本数据标准化预处理

FST ITN-ZH数据可视化&#xff1a;文本数据标准化预处理 1. 简介与背景 在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;原始中文文本常包含大量非标准表达形式&#xff0c;如“二零零八年八月八日”、“一百二十三”等。这些表达虽然对人类可读性强&#xff0…

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

Youtu-2B API快速接入:免服务器方案,测试0门槛

Youtu-2B API快速接入&#xff1a;免服务器方案&#xff0c;测试0门槛 作为一名在AI大模型领域摸爬滚打多年的技术老兵&#xff0c;我太理解前端工程师的痛点了。你辛辛苦苦把页面UI做得漂漂亮亮&#xff0c;交互逻辑也理得清清楚楚&#xff0c;结果到了最后一步——想给你的应…

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

语音识别避坑指南:用Whisper Web服务避开常见问题

语音识别避坑指南&#xff1a;用Whisper Web服务避开常见问题 1. 引言&#xff1a;为什么需要一个稳定的语音识别Web服务 随着多语言内容创作、远程会议记录和智能客服系统的普及&#xff0c;高质量的语音识别能力已成为许多应用的核心需求。OpenAI推出的Whisper模型凭借其强…

作者头像 李华
网站建设 2026/4/16 9:07:08

Hunyuan-MT1.8B旅游场景:多语言导览自动生成案例

Hunyuan-MT1.8B旅游场景&#xff1a;多语言导览自动生成案例 1. 引言 1.1 业务背景与需求 在全球化旅游日益普及的今天&#xff0c;游客对多语言导览服务的需求持续增长。无论是博物馆、景区还是城市地标&#xff0c;提供准确、流畅的多语言解说已成为提升用户体验的关键环节…

作者头像 李华
网站建设 2026/4/15 19:30:27

一键启动Qwen3-Embedding-4B:零配置搭建语义搜索服务

一键启动Qwen3-Embedding-4B&#xff1a;零配置搭建语义搜索服务 1. 引言&#xff1a;语义搜索进入高效部署时代 随着大模型技术的持续演进&#xff0c;文本嵌入&#xff08;Text Embedding&#xff09;已成为构建智能检索、推荐系统和知识管理平台的核心能力。然而&#xff…

作者头像 李华