news 2026/9/25 4:54:53

亲测有效:Ubuntu 16.04开机自动执行命令的简单方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
亲测有效:Ubuntu 16.04开机自动执行命令的简单方法

亲测有效:Ubuntu 16.04开机自动执行命令的简单方法

1. 引言

1.1 业务场景描述

在实际开发和运维过程中,经常会遇到需要系统在启动时自动执行某些命令的需求。例如,配置网络接口、挂载特定设备、启动自定义服务或运行监控脚本等。手动操作不仅效率低下,还容易遗漏,尤其是在部署多台设备或进行无人值守运行时。

本文将介绍一种在Ubuntu 16.04系统中实现开机自动执行命令的简单且稳定的方法——通过修改rc.local脚本实现自动化任务启动。该方法无需复杂的 systemd 配置,适合快速落地和调试验证。

1.2 痛点分析

常见的开机自启方案包括: - 编写 systemd 服务单元(复杂,学习成本高) - 使用 crontab 的 @reboot(依赖 cron 服务,执行时机较晚) - 添加到用户登录脚本(如 .bashrc,需登录后才生效)

这些方式各有局限,而rc.local提供了一个兼容性强、语法简洁、执行时机早的替代方案,特别适用于轻量级自动化需求。

1.3 方案预告

本文将详细介绍如何启用并正确配置/etc/rc.local文件,使其在 Ubuntu 16.04 上正常工作,并确保其中的命令能够随系统启动自动执行。同时提供完整示例与避坑指南,保证“亲测有效”。


2. 技术方案选型

2.1 为什么选择 rc.local?

尽管 Ubuntu 16.04 已经转向使用 systemd 作为初始化系统,但rc.local仍然被保留为一个兼容性机制。只要正确配置,它依然可以作为一个可靠的开机执行入口。

对比项rc.localsystemd 服务crontab @reboot
配置复杂度⭐⭐☆☆☆(极简)⭐⭐⭐⭐☆(较复杂)⭐⭐☆☆☆(简单)
执行时机系统基本就绪后可精确控制用户空间启动后
适用场景快速脚本执行守护进程管理用户级任务
兼容性Ubuntu 16.04 支持所有现代 Linux所有 Linux

结论:对于简单的命令或脚本执行任务,rc.local是最直接有效的选择。


3. 实现步骤详解

3.1 检查 rc-local.service 是否存在

Ubuntu 16.04 默认可能未启用rc.local,因为其背后依赖于一个名为rc-local.service的 systemd 单元。

首先检查该服务是否存在:

systemctl status rc-local

如果提示“not found”或“inactive”,则需要手动创建服务文件。


3.2 创建 rc-local.service 文件

使用 root 权限编辑服务文件:

sudo nano /etc/systemd/system/rc-local.service

填入以下内容:

[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target

说明: -ConditionPathExists确保只有当/etc/rc.local存在时才加载 -Type=forking表示脚本会自行 fork,不占用前台进程 -RemainAfterExit=yes表示即使脚本退出,服务仍视为活跃


3.3 创建或修改 /etc/rc.local 脚本

创建并编辑主脚本文件:

sudo nano /etc/rc.local

输入以下模板内容:

#!/bin/bash # 开机自启动命令写在此处 # 注意:必须以 exit 0 结尾 # 示例:启用无线网卡并配置 IP ifconfig wlan0 up sleep 2 ifconfig wlan0 192.168.1.100 netmask 255.255.255.0 # 可添加更多命令 echo "rc.local executed at $(date)" >> /var/log/rc-local.log exit 0

关键要求: - 脚本必须以#!/bin/bash开头(或#!/bin/sh) - 所有命令位于exit 0之前 -exit 0不可省略,否则 systemd 认为脚本失败 - 建议添加日志输出以便调试


3.4 设置文件权限

确保两个文件具有正确的权限:

# 设置 rc.local 可执行 sudo chmod +x /etc/rc.local # 设置 service 文件只读 sudo chmod 644 /etc/systemd/system/rc-local.service

3.5 启用并启动服务

启用rc-local.service,使其在开机时自动运行:

sudo systemctl enable rc-local.service

立即启动服务进行测试(无需重启):

sudo systemctl start rc-local.service

查看状态确认是否成功:

sudo systemctl status rc-local.service

预期输出应包含:

Active: active (exited) since ...

3.6 验证命令是否执行

可以通过以下方式验证:

  1. 查看日志文件(若已写入):bash cat /var/log/rc-local.log

  2. 检查网络配置是否生效:bash ifconfig wlan0

  3. 重启系统验证:bash sudo reboot

重启后再次检查上述结果,确认命令被自动执行。


4. 实践问题与优化

4.1 常见问题及解决方案

❌ 问题1:rc.local 未执行,systemctl 显示 failed

原因:缺少exit 0或脚本无执行权限
解决: - 确保最后一行是exit 0- 运行sudo chmod +x /etc/rc.local

❌ 问题2:命令执行顺序错误或设备未就绪

原因:某些硬件(如 USB 设备、网卡)尚未初始化完成
解决: - 在关键命令前加入sleep延迟,例如:bash sleep 5 ifconfig wlan0 up

❌ 问题3:中文注释导致解析错误

原因:/etc/rc.local使用/bin/sh解析,对编码敏感
解决: - 删除中文注释,或改用英文 - 或明确指定解释器为/bin/bash


4.2 性能优化建议

  1. 避免长时间阻塞:不要在rc.local中运行无限循环程序,除非使用&放入后台。bash /path/to/monitor_script.sh &

  2. 使用日志记录执行情况:bash echo "$(date): Starting custom startup tasks" >> /var/log/rc-local.log

  3. 分离复杂逻辑:将具体操作封装为独立脚本,在rc.local中调用:bash /opt/scripts/startup_tasks.sh

这样更易于维护和测试。


5. 完整可运行示例

5.1 目标功能

实现开机时: - 启动 wlan0 接口 - 分配静态 IP 地址 - 记录启动时间到日志

5.2 最终 /etc/rc.local 内容

#!/bin/bash # 自定义开机启动脚本 # 作者:测试开机启动脚本 # 功能:配置无线网络并记录日志 # 等待系统稳定 sleep 3 # 启动无线网卡 ifconfig wlan0 up # 配置静态 IP ifconfig wlan0 192.168.1.100 netmask 255.255.255.0 # 记录执行日志 echo "[$(date)] wlan0 configured with 192.168.1.100" >> /var/log/rc-local.log # 必须保留 exit 0

5.3 测试流程总结

  1. 创建/etc/systemd/system/rc-local.service
  2. 创建/etc/rc.local并赋权
  3. 启用并启动rc-local.service
  4. 检查状态与日志
  5. 重启验证持久性

6. 总结

6.1 实践经验总结

  • rc.local在 Ubuntu 16.04 上仍可用,但需手动启用rc-local.service
  • 脚本必须包含exit 0,否则 systemd 会判定失败
  • 命令执行时机受系统资源初始化影响,必要时加sleep
  • 推荐将复杂逻辑抽离为外部脚本,保持rc.local清洁

6.2 最佳实践建议

  1. 始终添加日志输出,便于排查问题;
  2. 避免在 rc.local 中直接写长段代码,应调用外部脚本;
  3. 定期测试重启行为,确保自启功能持续有效。

该方法已在多个嵌入式设备和服务器环境中验证通过,真正实现“亲测有效”。


获取更多AI镜像

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

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

Hunyuan-OCR发票识别教程:会计小白也能1小时上手

Hunyuan-OCR发票识别教程:会计小白也能1小时上手 你是不是也和我一样,每个月都要面对成堆的电子发票?作为小公司的出纳或财务人员,手动录入发票信息不仅耗时耗力,还容易出错。一张发票十几项内容,姓名、税…

作者头像 李华
网站建设 2026/9/20 16:56:48

YOLOv9 TensorRT加速:高性能推理部署方案探索

YOLOv9 TensorRT加速:高性能推理部署方案探索 1. 技术背景与优化需求 随着目标检测模型在工业级应用中的广泛落地,对实时性、低延迟和高吞吐量的推理性能要求日益提升。YOLOv9 作为当前主流的目标检测架构之一,在精度与速度之间实现了新的平…

作者头像 李华
网站建设 2026/9/20 16:58:06

语音开发者工具箱:CAM++在实际业务中的应用思路

语音开发者工具箱:CAM在实际业务中的应用思路 1. CAM系统核心能力解析 1.1 系统功能与技术定位 CAM 是一个基于深度学习的说话人验证系统,其核心技术目标是实现高精度的声纹识别。该系统由科哥构建并提供WebUI二次开发支持,主要具备两大核…

作者头像 李华
网站建设 2026/9/20 8:24:12

买不起GPU怎么办?bge-large-zh-v1.5云端体验1小时1块钱

买不起GPU怎么办?bge-large-zh-v1.5云端体验1小时1块钱 你是不是也遇到过这种情况:想参加AI竞赛,看到别人用大模型做出惊艳项目,自己却只能干瞪眼?家里那台普通台式机连最基础的深度学习任务都跑不动,显卡…

作者头像 李华
网站建设 2026/9/14 19:31:21

BERT掩码模型应用场景:常识推理系统部署完整流程

BERT掩码模型应用场景:常识推理系统部署完整流程 1. 引言 1.1 业务场景描述 在自然语言处理的实际应用中,语义理解是构建智能对话、内容生成和知识推理系统的核心能力。其中,常识推理与上下文补全任务广泛应用于教育辅助、文本纠错、智能写…

作者头像 李华
网站建设 2026/9/21 2:58:22

BGE-M3入门指南:语义搜索API快速集成

BGE-M3入门指南:语义搜索API快速集成 1. 引言 在现代信息检索系统中,高效、精准的语义搜索能力已成为构建智能应用的核心需求。无论是搜索引擎、推荐系统还是知识库问答,都需要模型能够理解文本的深层语义并进行准确匹配。BGE-M3 是由 Flag…

作者头像 李华