2026/2/19 5:44:25
网站建设
项目流程
注册网站云空间,网站后期维护很难吗,网站公司企业网站,网站首页布局设计教程小白也能学会的Ubuntu开机启动脚本设置完整教程
你是不是也遇到过这样的问题#xff1a;写好了一个监控程序、一个数据采集脚本#xff0c;或者一个自动备份工具#xff0c;每次重启电脑后都要手动打开终端、切换路径、再敲一遍 ./run.sh#xff1f;太麻烦了#xff01;更…小白也能学会的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文件夹。打开终端快捷键CtrlAltT依次输入以下三条命令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输入完成后按CtrlO字母 O不是零保存回车确认文件名再按CtrlX退出编辑器。现在你就在~/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.33.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表示“执行成功”少了它系统可能认为启动异常而中断后续流程。保存并退出CtrlO→ 回车 →CtrlX。然后赋予可执行权限sudo chmod x /etc/rc.local3.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 21 fi解释[ -x ...]是判断脚本是否存在且有执行权限/dev/null 21表示把脚本输出包括错误全部丢弃避免登录时刷屏表示后台运行不阻塞终端登录$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 21 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 $LOCKFILE6.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星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。