news 2026/3/17 12:56:11

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/3/13 20:15:07

AI读脸术多场景应用:教育/零售/安防部署案例合集

AI读脸术多场景应用:教育/零售/安防部署案例合集 1. 引言:AI读脸术的现实价值与技术演进 随着计算机视觉技术的持续突破,基于人脸属性分析的“AI读脸术”正从实验室走向真实世界。通过自动识别个体的性别、年龄段等基础生物特征&#xff0c…

作者头像 李华
网站建设 2026/3/14 14:14:19

DLSS Swapper完全攻略:3步让你的游戏画质焕然一新

DLSS Swapper完全攻略:3步让你的游戏画质焕然一新 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏画面不够清晰流畅而困扰吗?DLSS Swapper是一款专为游戏玩家设计的智能工具&#xff…

作者头像 李华
网站建设 2026/3/14 20:53:31

Blender 3MF插件深度解析:解锁3D打印工作流新境界

Blender 3MF插件深度解析:解锁3D打印工作流新境界 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 还在为3D打印文件格式转换而烦恼吗?Blender 3MF…

作者头像 李华
网站建设 2026/3/10 18:00:59

AutoGen Studio实战:构建多语言支持的AI代理系统

AutoGen Studio实战:构建多语言支持的AI代理系统 AutoGen Studio是一个低代码界面,旨在帮助开发者快速构建AI代理、通过工具增强它们、将它们组合成团队,并与之交互以完成复杂任务。它基于AutoGen AgentChat——一个用于构建多代理系统的高级…

作者头像 李华
网站建设 2026/3/11 3:38:10

通义千问3-Embedding-4B实战:法律文书智能摘要系统

通义千问3-Embedding-4B实战:法律文书智能摘要系统 1. 技术背景与应用场景 在法律行业,每天都会产生大量结构复杂、篇幅冗长的文书材料,包括判决书、起诉状、合同协议和仲裁文件。传统的人工阅读与信息提取方式效率低下,难以满足…

作者头像 李华