news 2026/8/22 13:29:33

Ubuntu系统自启脚本设置全解析,小白一看就懂

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu系统自启脚本设置全解析,小白一看就懂

Ubuntu系统自启脚本设置全解析,小白一看就懂

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

在实际的Linux运维和开发场景中,我们常常希望某些服务或程序能够在系统启动时自动运行,而无需手动登录后逐条执行命令。例如:

  • 自动启动后台监控脚本
  • 启动Web服务或AI推理模型
  • 挂载特定设备并运行处理程序

Ubuntu作为最流行的桌面级Linux发行版之一,提供了多种方式实现开机自启动脚本。本文将从零开始,详细讲解如何在Ubuntu系统中配置开机自启脚本,涵盖主流方法、权限设置、常见问题及替代方案,确保小白用户也能一次成功。


2. 方法一:通过rc.local实现开机自启(推荐新手)

2.1 创建自定义启动脚本

首先,在本地创建一个Shell脚本文件,用于存放你希望开机执行的命令。

mkdir -p ~/scripts nano ~/scripts/auto_run_test.sh

输入以下内容:

#!/bin/bash # 将启动信息写入日志文件 echo "System startup at $(date)" >> /home/$USER/scripts/startup.log # 进入指定目录并运行模拟程序 cd /home/$USER/myapp/build || exit ./sim/sim & # 记录完成状态 echo "Simulation started." >> /home/$USER/scripts/startup.log

说明

  • #!/bin/bash是脚本解释器声明,必须放在第一行。
  • 使用$USER变量避免硬编码用户名。
  • &表示后台运行,防止阻塞系统启动流程。

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

2.2 设置脚本可执行权限

Linux默认不允许直接执行普通文件,需显式赋予执行权限:

chmod +x ~/scripts/auto_run_test.sh

等价于:

sudo chmod 755 /home/$USER/scripts/auto_run_test.sh

✅ 建议使用755而非777,更安全:所有者可读写执行,组和其他用户仅可读执行。

2.3 配置rc.local文件调用脚本

/etc/rc.local是传统SysVinit系统中用于执行开机任务的标准入口,在大多数Ubuntu版本中仍可用。

检查是否存在rc.local
ls /etc/rc.local

如果不存在,手动创建:

sudo nano /etc/rc.local

填入以下标准模板:

#!/bin/sh -e # rc.local # This script is executed at the end of each multiuser runlevel. # Your commands go here /home/$USER/scripts/auto_run_test.sh exit 0

⚠️ 注意:

  • 必须以#!/bin/sh -e开头,-e表示遇到错误立即退出。
  • exit 0不可省略,否则可能导致系统卡在启动界面。
设置rc.local可执行
sudo chmod +x /etc/rc.local
确保rc-local服务已启用(Ubuntu 18.04+)

较新版本使用systemd,需确认服务是否激活:

sudo systemctl status rc-local

若未启用,执行:

sudo systemctl enable rc-local

然后重启验证:

sudo reboot

重启后检查日志:

cat ~/scripts/startup.log

应能看到类似输出:

System startup at Mon Apr 5 10:23:45 CST 2025 Simulation started.

3. 方法二:使用 systemd 服务(现代标准做法)

对于Ubuntu 16.04及以上版本,官方推荐使用systemd替代传统的rc.local。它更稳定、支持依赖管理、日志追踪等功能。

3.1 创建 systemd 服务单元文件

sudo nano /etc/systemd/system/my-startup-script.service

填写如下内容:

[Unit] Description=Custom Startup Script After=multi-user.target [Service] Type=forking User=%i ExecStart=/home/%i/scripts/auto_run_test.sh WorkingDirectory=/home/%i/scripts StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target

参数解析

  • After=multi-user.target:表示在网络和多用户环境准备好之后运行。
  • Type=forking:适用于后台运行的脚本(有&daemonize)。
  • User=%i:动态替换为当前用户名(如User=john)。
  • StandardOutput/StandardError=journal:输出重定向到journal日志,便于排查。

3.2 启用并启动服务

# 重新加载systemd配置 sudo systemctl daemon-reexec sudo systemctl enable my-startup-script.service # 可选:立即测试运行 sudo systemctl start my-startup-script.service # 查看运行状态 sudo systemctl status my-startup-script.service

3.3 查看日志调试

journalctl -u my-startup-script.service --since today

输出示例:

Apr 05 10:23:46 ubuntu systemd[1]: Starting Custom Startup Script... Apr 05 10:23:46 ubuntu auto_run_test.sh[1234]: System startup at Mon Apr 5 10:23:46 CST 2025 Apr 05 10:23:46 ubuntu systemd[1]: Started Custom Startup Script.

✅ 推荐理由:systemd 提供完整的生命周期管理,适合生产环境部署。


4. 方法三:修改/etc/profile(适用于用户登录自启)

当系统没有图形界面或无法使用rc.localsystemd时,可将命令追加到/etc/profile,该文件在每次用户登录时执行。

4.1 编辑 profile 文件

sudo nano /etc/profile

在末尾添加:

if [ -f /home/$USER/scripts/auto_run_test.sh ]; then /bin/bash /home/$USER/scripts/auto_run_test.sh fi

❗ 注意:此方法仅在用户登录终端时触发,不适用于无人值守开机运行。

4.2 适用场景对比

方法触发时机是否需要登录适用版本推荐度
rc.local系统启动完成Ubuntu 16.04~20.04⭐⭐⭐⭐☆
systemd服务系统启动阶段所有现代Ubuntu⭐⭐⭐⭐⭐
/etc/profile用户登录时所有版本⭐⭐☆

5. 常见问题与解决方案

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

✅ 权限是否正确
ls -l /home/$USER/scripts/auto_run_test.sh # 正确输出应包含 x(执行权限):-rwxr-xr-x
✅ 路径是否为绝对路径

避免使用~或相对路径,全部使用完整路径:

❌ 错误:

sh ~/scripts/test.sh

✅ 正确:

/bin/bash /home/john/scripts/test.sh
✅ 是否缺少解释器声明

确保脚本首行是:

#!/bin/bash

否则shell可能无法识别语法。

✅ systemd 服务失败?查看日志定位
journalctl -u my-startup-script.service -b

常见错误包括:

  • 路径不存在
  • 用户不存在
  • 命令语法错误

5.2 如何判断当前Ubuntu使用哪种初始化系统?

ps -p 1 -o comm=

输出结果:

  • init→ SysVinit(老版本)
  • systemd→ 新一代系统(Ubuntu 16.04+ 默认)

6. 最佳实践建议

6.1 安全性优化

  • 避免使用chmod 777,优先选择755
  • 使用专用低权限用户运行脚本,而非root
  • 日志记录关键操作,便于审计

6.2 脚本健壮性增强

#!/bin/bash set -euo pipefail # 遇错终止、变量未定义报错、管道错误捕获 LOGFILE="/home/$USER/scripts/startup.log" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOGFILE" } log "Starting simulation..." cd /home/$USER/myapp/build || { log "Failed to enter dir"; exit 1; } ./sim/sim & log "Startup script finished."

6.3 多脚本统一管理

可创建主控脚本集中调度:

#!/bin/bash /home/user/scripts/start_network.sh sleep 2 /home/user/scripts/start_database.sh sleep 1 /home/user/scripts/start_ai_model.sh

再由systemdrc.local调用该主脚本。


7. 总结

本文系统梳理了Ubuntu系统下设置开机自启脚本的三种核心方法:

  1. rc.local方式:简单直观,适合入门用户,但在部分新版Ubuntu中需手动启用服务;
  2. systemd服务方式:现代Linux标准,功能强大、日志完善,推荐用于生产环境;
  3. /etc/profile注入方式:仅在用户登录时生效,适合作为备选方案。

无论选择哪种方式,都应遵循以下原则:

  • 使用绝对路径
  • 设置正确权限
  • 添加日志输出
  • 测试后再部署

只要按照本文步骤操作,即使是Linux新手也能轻松实现自动化开机启动。


获取更多AI镜像

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

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

通义千问2.5-7B-Instruct实战:科研论文写作辅助

通义千问2.5-7B-Instruct实战:科研论文写作辅助 1. 引言 随着大型语言模型(LLM)在自然语言处理领域的持续突破,其在科研辅助场景中的应用价值日益凸显。特别是在学术写作环节,研究者常面临逻辑组织、语言润色、格式规…

作者头像 李华
网站建设 2026/8/21 16:44:06

在线电路仿真与传统实验结合的教学方案设计

让电路课“活”起来:仿真与实操如何联手重塑工科教学你有没有经历过这样的场景?在电路实验课上,花了半小时接线,结果示波器一打开——没信号。反复检查,发现是电源正负极插反了;好不容易调出波形&#xff0…

作者头像 李华
网站建设 2026/8/21 16:44:11

中文口音模拟尝试:Sambert方言语音生成可行性分析

中文口音模拟尝试:Sambert方言语音生成可行性分析 1. 技术背景与问题提出 随着深度学习在语音合成领域的持续突破,高质量、个性化的文本转语音(TTS)系统正逐步从实验室走向实际应用。传统TTS系统多聚焦于标准普通话的自然度提升…

作者头像 李华
网站建设 2026/8/21 16:44:12

Red Panda Dev-C++:轻量级C++开发工具的终极指南

Red Panda Dev-C:轻量级C开发工具的终极指南 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 你是否曾经因为IDE启动缓慢而打断编程思路?是否被复杂的配置过程耗费大量时间&#xff…

作者头像 李华
网站建设 2026/8/21 16:44:11

VibeThinker-1.5B性能测评:与GPT-OSS-20B Medium对比谁更强?

VibeThinker-1.5B性能测评:与GPT-OSS-20B Medium对比谁更强? 1. 引言:小模型时代的推理能力突破 随着大模型训练成本的不断攀升,业界对“更大是否一定更好”提出了越来越多的质疑。在这一背景下,微博开源的 VibeThin…

作者头像 李华
网站建设 2026/8/21 16:44:10

英雄联盟效率提升指南:5个核心功能助你成为游戏高手

英雄联盟效率提升指南:5个核心功能助你成为游戏高手 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 还在为英雄…

作者头像 李华