news 2026/3/23 12:47:15

小白也能学会的Ubuntu开机启动脚本设置完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小白也能学会的Ubuntu开机启动脚本设置完整教程

小白也能学会的Ubuntu开机启动脚本设置完整教程

你是不是也遇到过这样的问题:写好了一个监控程序、一个数据采集脚本,或者一个自动备份工具,每次重启电脑后都要手动打开终端、切换路径、再敲一遍./run.sh?太麻烦了!更糟的是,有时候忘了这一步,关键任务就断掉了。

别担心——这篇教程就是为你准备的。不需要懂 systemd、不用背复杂命令、不涉及晦涩概念。只要你会用鼠标新建文件、会复制粘贴几行代码、知道怎么在终端里输入命令,就能让脚本在 Ubuntu 开机时自动运行,就像系统自带的服务一样可靠。

本文全程基于真实操作验证,适配 Ubuntu 20.04、22.04、24.04 等主流版本(包括默认不带/etc/rc.local的新系统),覆盖两种最稳妥的方法:传统rc.local方式和通用profile补充方式。每一步都配有清晰说明、可直接复制的命令,以及常见卡点的解决提示。哪怕你是第一次接触 Linux,也能照着做完。


1. 先搞清楚:我们要实现什么效果

开机启动脚本,说白了就是让系统在完成初始化、桌面加载完成前,悄悄帮你执行一段你写好的命令。比如:

  • 自动启动一个 Python 数据监听服务
  • 每次开机把日志清空并创建新记录文件
  • 启动一个本地 Web 服务供局域网访问
  • 运行一个硬件检测脚本并保存结果

它不是“一开机就弹窗”,而是安静地在后台运行,不打扰你使用电脑。而我们今天要做的,就是一个最基础但最典型的例子:开机自动生成一个带时间戳的文本文件,并写入一句问候语

这个小任务看似简单,但它包含了所有核心环节:脚本编写、权限设置、系统级调用、路径处理、错误检查。学会了它,你就能举一反三,部署任何你想自动运行的程序。


2. 第一步:写一个能跑起来的脚本

别被“脚本”吓到——它其实就是一个纯文本文件,里面写的是你平时在终端里敲的命令。

2.1 创建脚本文件

我们把它放在一个干净、易找的位置:你的主目录下的scripts文件夹。

打开终端(快捷键Ctrl+Alt+T),依次输入以下三条命令:

mkdir -p ~/scripts cd ~/scripts nano auto_start_demo.sh

小提示:nano是 Ubuntu 自带的简易文本编辑器,比vim更友好。如果提示Command 'nano' not found,先运行sudo apt update && sudo apt install nano -y安装即可。

这时会进入编辑界面。请逐字准确输入以下内容(注意标点符号和空格):

#!/bin/bash # 获取当前时间,格式为 年-月-日_时:分:秒 TIMESTAMP=$(date +"%Y-%m-%d_%H:%M:%S") # 在脚本所在目录下生成 output.txt,并写入问候语和时间 echo "Hello! This script ran at: $TIMESTAMP" > ./output.txt # 可选:再写一行到另一个文件,方便验证是否真执行了 echo "Startup completed successfully." > ./startup_log.txt

输入完成后,按Ctrl+O(字母 O,不是零)保存,回车确认文件名,再按Ctrl+X退出编辑器。

现在你就在~/scripts/目录下有了一个叫auto_start_demo.sh的脚本文件。

2.2 给脚本加上“可执行”权限

Linux 默认不会运行.sh文件,必须明确告诉系统:“这个文件可以当程序来跑”。

回到终端,确保你在~/scripts目录下(可以用pwd命令确认),然后输入:

chmod +x auto_start_demo.sh

这条命令的意思是:“给这个文件加上‘执行’权限”。它比chmod 777更安全、更规范,是推荐做法。

2.3 手动测试一下:确保脚本能独立运行

别急着塞进系统启动流程,先验证它本身没问题:

./auto_start_demo.sh

回车后,如果没有报错,就说明成功了。接着检查是否生成了文件:

ls -l *.txt cat output.txt

你应该看到类似这样的输出:

Hello! This script ran at: 2024-06-15_14:28:03

如果一切正常,恭喜你——脚本部分已经搞定。接下来就是让它“开机自动跑”。


3. 方法一:通过/etc/rc.local设置(推荐给大多数用户)

这是最经典、最直观的方式,适用于绝大多数 Ubuntu 桌面版。它的特点是:系统启动后期、用户登录前执行,适合需要访问硬件或网络的服务类脚本

3.1 检查系统是否支持 rc.local

不是所有新版 Ubuntu 都默认启用rc.local。我们先确认一下:

ls -l /etc/rc.local
  • 如果显示No such file or directory→ 说明系统没这个文件,需要手动创建(见 3.2)
  • 如果显示权限为-rwxr-xr-x或类似可执行权限 → 可直接跳到 3.3
  • 如果显示权限是-rw-r--r--(不可执行)→ 需要先加权限(见 3.3)

3.2 创建并启用 rc.local(适用于缺失该文件的系统)

依次执行以下命令:

sudo nano /etc/rc.local

在打开的空白文件中,完整粘贴以下内容(注意:第一行#!/bin/bash和最后一行exit 0缺一不可):

#!/bin/bash # 这是系统级启动脚本,会在多用户模式下最后执行 # 所有命令都会以 root 权限运行,请谨慎填写 # 切换到你的脚本所在目录 cd /home/$SUDO_USER/scripts # 执行你的脚本(注意:这里用 su 切换回普通用户,避免权限过高出错) su $SUDO_USER -c "./auto_start_demo.sh" exit 0

关键说明:

  • $SUDO_USER是一个变量,会自动替换成你当前登录的用户名(比如ubuntu),所以这段脚本在任何人的电脑上都能通用;
  • 使用su $SUDO_USER -c "..."是为了防止脚本以 root 身份运行时,因路径或权限问题失败(例如写入文件到/home/ubuntu/下);
  • exit 0表示“执行成功”,少了它,系统可能认为启动异常而中断后续流程。

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

然后赋予可执行权限:

sudo chmod +x /etc/rc.local

3.3 修改已有 rc.local(适用于已存在但不可执行的系统)

如果你之前ls -l /etc/rc.local看到的是普通文件(无x权限),只需两步:

sudo chmod +x /etc/rc.local sudo nano /etc/rc.local

exit 0之前,添加这两行(位置很重要!必须在exit 0上方):

cd /home/$SUDO_USER/scripts su $SUDO_USER -c "./auto_start_demo.sh"

保存退出即可。


4. 方法二:通过/etc/profile补充(兼容性最强的备选方案)

如果rc.local方式在你机器上不起作用(比如某些云服务器镜像或极简安装版),或者你希望脚本在用户登录后立即运行(比如要启动图形界面程序),那就用这个方法。

它不依赖任何服务,只修改一个全局配置文件,所有用户登录时都会读取,稳定且几乎 100% 有效。

4.1 编辑 profile 文件

sudo nano /etc/profile

把光标移到文件最底部,另起一行,粘贴以下内容:

# 开机启动脚本:auto_start_demo.sh if [ -x "/home/$USER/scripts/auto_start_demo.sh" ]; then /home/$USER/scripts/auto_start_demo.sh >/dev/null 2>&1 & fi

解释:

  • [ -x "..."]是判断脚本是否存在且有执行权限;
  • >/dev/null 2>&1表示把脚本输出(包括错误)全部丢弃,避免登录时刷屏;
  • &表示后台运行,不阻塞终端登录;
  • $USER是当前登录用户的变量,比硬编码用户名更安全。

保存退出。


5. 验证与排错:重启前必做的三件事

别急着sudo reboot。先做这几步检查,能省下你重启三次的时间。

5.1 检查路径和权限是否全部正确

运行以下命令,逐项核对输出是否匹配:

# 1. 确认脚本存在且可执行 ls -l ~/scripts/auto_start_demo.sh # 2. 确认 rc.local 存在且可执行(如果用了方法一) ls -l /etc/rc.local # 3. 确认 profile 中追加的内容已生效(如果用了方法二) sudo tail -n 5 /etc/profile

预期输出中应包含x(执行权限)和你刚添加的路径。

5.2 模拟启动流程,手动触发一次

不用重启,也能测试效果:

# 模拟 rc.local 方式(需 root) sudo /etc/rc.local # 或模拟 profile 方式(当前用户) source /etc/profile

然后检查:

ls -l ~/scripts/*.txt cat ~/scripts/output.txt

如果文件已更新、时间戳是最新,说明逻辑完全通了。

5.3 常见问题速查表

现象可能原因解决办法
重启后没生成文件脚本路径写错(如用了~而不是/home/用户名改成绝对路径/home/yourname/scripts/...
提示Permission denied忘了chmod +x,或rc.local没加执行权限补上sudo chmod +x ...
文件生成了但内容为空脚本里用了相对路径(如./output.txt),但执行环境不同改成绝对路径:/home/yourname/scripts/output.txt
登录后终端卡住几秒profile中脚本没加&后台运行在命令末尾补上&
rc.local不生效Ubuntu 版本较新,默认禁用该服务运行sudo systemctl enable rc-local启用服务

6. 进阶建议:让脚本更健壮、更实用

你现在已掌握核心能力。下面几个小技巧,能帮你把脚本从“能用”升级为“好用”“长期可用”。

6.1 加个日志记录,出问题一眼定位

在脚本开头加上:

exec >> /home/$USER/scripts/startup.log 2>&1 echo "=== $(date) ==="

这样每次运行的全部输出(包括错误)都会追加到startup.log,再也不用盲猜哪里错了。

6.2 避免重复执行:加个锁文件机制

如果你的脚本运行时间较长(比如启动一个服务),可以防止系统误判为失败而多次调用:

LOCKFILE="/home/$USER/scripts/.startup_lock" if [ -f "$LOCKFILE" ]; then echo "Script already running." exit 0 fi touch "$LOCKFILE" # ... 你的主逻辑放在这里 ... rm -f "$LOCKFILE"

6.3 想启动图形程序?加个 DISPLAY 环境变量

比如你要开机自动打开一个浏览器页面:

export DISPLAY=:0 export XAUTHORITY=/home/$USER/.Xauthority su $USER -c "firefox https://example.com &"

注意:必须在su切换用户后设置,否则无效。


7. 总结:你已经掌握了 Ubuntu 开机启动的核心能力

回顾一下,我们完成了什么:

  • 写了一个功能清晰、带时间戳的启动脚本
  • 学会了两种主流开机启动方式:rc.local(系统级)和/etc/profile(用户级)
  • 掌握了权限设置、路径处理、变量使用等关键细节
  • 学会了快速验证、模拟测试和常见问题排查
  • 还拿到了三个实用进阶技巧:日志记录、防重入锁、图形界面支持

这不是一个“一次性教程”,而是一套可复用的方法论。以后你想开机启动 Python 服务、Node.js 应用、Docker 容器,甚至一个自定义的 GUI 工具,只需要把./auto_start_demo.sh里的几行命令,替换成你的真实启动命令即可。

真正的 Linux 自动化,就从这一小步开始。


获取更多AI镜像

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

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

推理速度提升100%?DeepSeek-R1-Distill-Qwen-1.5B vLLM优化实战

推理速度提升100%?DeepSeek-R1-Distill-Qwen-1.5B vLLM优化实战 1. 为什么说它是“小钢炮”:1.5B参数,扛起7B级推理任务 你有没有遇到过这样的困境:想在本地跑一个真正能解数学题、写代码、理清逻辑链的模型,但显卡只…

作者头像 李华
网站建设 2026/3/21 3:09:56

生成模糊怎么调?Live Avatar画质优化技巧

生成模糊怎么调?Live Avatar画质优化技巧 数字人视频生成中,“画面模糊”是最常被用户抱怨的问题之一——不是模型不会动,而是动起来后五官失焦、发丝糊成一片、口型边缘像蒙了层薄雾。尤其在Live Avatar这类基于14B大模型的高保真系统中&am…

作者头像 李华
网站建设 2026/3/20 8:18:34

WAN2.2文生视频+SDXL_Prompt风格应用场景:游戏公司CG预告片AI辅助脚本

WAN2.2文生视频SDXL_Prompt风格应用场景:游戏公司CG预告片AI辅助脚本 1. 为什么游戏CG团队开始用WAN2.2做预告片脚本预演 你有没有见过那种让人一眼就停住的CG预告片?镜头推拉精准、光影流动自然、角色情绪饱满,连风拂过衣角的节奏都像经过…

作者头像 李华
网站建设 2026/3/15 9:50:10

GLM-4v-9b效果展示:超GPT-4-turbo的图文理解高清案例集

GLM-4v-9b效果展示:超GPT-4-turbo的图文理解高清案例集 1. 这不是“又一个”多模态模型,而是能看清小字表格的视觉理解新选择 你有没有试过把一张带密密麻麻数据的Excel截图、一份扫描版财务报表,或者手机拍的模糊会议白板照片丢给AI&#…

作者头像 李华
网站建设 2026/3/19 10:06:27

WMS、OMS 和 TMS,三者之间是什么关系?

WMS、OMS 和 TMS,三者之间是什么关系?这个问题,看起来是系统概念问题, 但我接触过不少企业后发现,很多人真正想问的其实是一句话:订单这么多、仓库这么乱、物流这么扯, 到底哪个系统该先上&…

作者头像 李华
网站建设 2026/3/20 13:52:36

语音心理测评初探:基于SenseVoiceSmall的情绪趋势分析

语音心理测评初探:基于SenseVoiceSmall的情绪趋势分析 【免费下载链接】SenseVoiceSmall 多语言语音理解模型(富文本/情感识别版) 项目地址:https://github.com/modelscope/models/tree/main/iic/SenseVoiceSmall 你有没有想过&…

作者头像 李华