给普通用户看的开机启动教程,看不懂算我输
你是不是也遇到过这种情况:写好了一个小工具、一个监控脚本,或者一个自动备份程序,每次重启电脑后都得手动点开终端、cd到目录、再敲一遍./start.sh?烦不烦?累不累?更糟的是——忘了运行,结果该做的事全没干。
别急。这篇教程就是为你写的。不是给运维工程师,不是给Linux老手,而是专门给刚学会用ls和cd、看到sudo会犹豫三秒、复制粘贴都怕少敲一个字母的普通用户准备的。全程不用记命令,不用背原理,只讲“哪一步点哪里、敲什么、为什么这么敲”,连错一步都能立刻发现、马上回退。
如果你照着做下来还卡在某个地方,那真不是你问题——是我没写清楚。欢迎回来截图问我,我帮你一行行看。
1. 先搞明白:我们到底要做什么
开机启动,说白了就一件事:让电脑一打开,就自动帮你把某个脚本跑起来。
比如:
- 每次开机自动启动你的Python爬虫(抓天气、抓新闻)
- 自动开启一个本地Web服务(比如用Flask搭的个人笔记页)
- 自动执行定时备份(把桌面文件拷到U盘或NAS)
- 自动启动一个硬件检测脚本(比如监控树莓派温度)
注意:这不是让你改系统内核,也不是让你编译驱动。你只需要写一个简单的.sh文件,告诉电脑:“开机后,请帮我执行这几行命令”。
整个过程分三步,像煮泡面一样简单:
- 写个“菜谱”(就是那个
.sh脚本) - 把它放进“厨房固定位置”(系统认得的地方)
- 告诉厨房“每天早上7点准时开火”(注册为开机任务)
下面我们就按这个顺序,一步一步来。
2. 第一步:写一个谁都能看懂的启动脚本
别被“脚本”吓到。它就是一个纯文本文件,后缀是.sh,内容全是中文注释+几行命令,就像写备忘录。
2.1 创建脚本文件(用图形界面操作,零命令行压力)
推荐方式(最安全):
- 打开你的文件管理器(就是双击就能打开的“图标”)
- 进入主目录(通常是
/home/你的用户名/,比如/home/john) - 右键 → “新建文档” → “空文件”
- 把文件名改成
myboot.sh(注意:必须带.sh后缀)
小提醒:
- 不要用Word、WPS保存!必须用系统自带的文本编辑器(如Ubuntu的“文本编辑器”,或Windows的记事本)
- 保存时,编码选UTF-8(无BOM)—— 大多数编辑器默认就是,不用改
2.2 往里面填内容(直接复制,改两处就行)
用文本编辑器打开myboot.sh,把下面整段内容完全复制进去,然后只改两个地方:
#!/bin/bash # ============================================= # 【开机启动脚本】—— 普通用户友好版 # 功能:开机后自动运行你指定的程序 # 作者:你(填你的名字或昵称,可选) # 最后修改:今天日期(比如 2024-06-15) # ============================================= # 👇👇👇【你唯一要改的第1处】👇👇👇 # 请把下面这行里的 "/home/john/myscript.py" 换成你自己的程序路径! # 例如:你的Python脚本在桌面,就写 "/home/john/桌面/myscript.py" # 例如:你的Shell脚本在文档里,就写 "/home/john/文档/start_server.sh" PROGRAM_PATH="/home/john/myscript.py" # 👇👇👇【你唯一要改的第2处】👇👇👇 # 请把下面这行里的 "python3" 换成你实际用的命令 # 如果是Python脚本,一般就是 "python3" 或 "python" # 如果是Shell脚本,就写 "bash" 或直接 "./" # 如果是可执行文件(比如 ./myapp),就写 "./" RUN_COMMAND="python3" # ———————————————————————————————— # 下面这些代码,普通用户请不要改动! # 系统会自动读取上面两行,然后执行 # ———————————————————————————————— # 切换到脚本所在目录(避免路径出错) cd "$(dirname "$PROGRAM_PATH")" || exit 1 # 检查程序是否存在 if [ ! -f "$PROGRAM_PATH" ]; then echo "❌ 错误:找不到程序文件 $PROGRAM_PATH" echo "请检查上面 PROGRAM_PATH 的路径是否写对了!" exit 1 fi # 尝试运行(加 & 让它后台运行,不卡住开机流程) echo " 正在启动:$PROGRAM_PATH" $RUN_COMMAND "$PROGRAM_PATH" > /tmp/myboot.log 2>&1 & # 可选:弹个提示(仅限有桌面环境时,不影响开机) if [ -n "$DISPLAY" ]; then (sleep 3 && notify-send "开机启动成功" "已运行:$(basename "$PROGRAM_PATH")") & fi改完后长这样(示例):
PROGRAM_PATH="/home/lin/桌面/backup.sh" RUN_COMMAND="bash"改完保存,关掉编辑器。
现在你已经有了一个“开机菜谱”。
3. 第二步:把它放进系统认得的“厨房固定位置”
Linux系统只信任放在特定文件夹里的启动脚本。我们要做的,就是把刚才写的myboot.sh放进/etc/init.d/这个“官方厨房”。
注意:这一步需要管理员权限(也就是sudo),但我们会用最稳妥的方式,不手敲复杂命令。
3.1 图形化操作法(推荐给所有人)
- 打开文件管理器
- 在地址栏输入:
/etc/init.d/→ 回车
(如果提示“权限不足”,别慌,这是正常现象) - 点击右上角菜单 → “以管理员身份打开” 或 “用root权限打开”
(不同系统叫法略有不同,Ubuntu通常显示为“在终端中以管理员身份打开”) - 这时会弹出一个要求输入密码的窗口 → 输入你登录电脑的密码(输的时候不显示字符,正常)
- 成功进入
/etc/init.d/文件夹后,把刚才写的myboot.sh文件拖进来 - 右键点击
myboot.sh→ “属性” → “权限”选项卡 → 勾选“允许作为程序执行”
(这一步等同于命令chmod +x myboot.sh,但点一下就搞定)
完成!脚本已就位。
3.2 命令行备用法(如果你习惯终端)
如果上面图形方式打不开,或者你想确认是否成功,可以打开终端(Ctrl+Alt+T),依次敲:
# 把脚本复制过去(替换 /home/你的用户名/ 为你的实际路径) sudo cp /home/你的用户名/myboot.sh /etc/init.d/ # 加上可执行权限 sudo chmod +x /etc/init.d/myboot.sh # 检查是否成功(应该能看到绿色的 myboot.sh) ls -l /etc/init.d/myboot.sh出现类似-rwxr-xr-x 1 root root ... myboot.sh就说明权限设置成功。
4. 第三步:告诉系统“每天开机自动做这件事”
现在脚本在厨房里了,但系统还不知道它该什么时候开火。我们需要“注册”它。
4.1 用最稳的方法:update-rc.d(亲测可用,优先推荐)
继续在终端里(或新开一个终端窗口),输入:
sudo update-rc.d myboot.sh defaults看到输出update-rc.d: using dependency based boot sequencing和Adding system startup for /etc/init.d/myboot.sh ...就代表注册成功。
小知识:defaults是个“傻瓜模式”,它会自动把你的脚本安排在大多数服务之后启动(比如网络已经连上了),适合95%的普通需求。不用纠结数字、不用记优先级。
4.2 验证是否注册成功(两招保底)
方法一:查列表
sudo ls /etc/rc*.d/ | grep myboot如果看到类似S20myboot.sh的结果,说明已加入开机队列(S=Start,20是启动顺序号)。
方法二:手动触发测试(不重启!)
sudo /etc/init.d/myboot.sh start如果看到正在启动:...和日志提示,说明脚本本身能跑通。
至此,全部配置完成。
5. 测试与排错:三分钟定位问题
别急着重启。先用最安全的方式验证:
5.1 快速测试(不重启,不中断当前工作)
在终端里运行:
sudo /etc/init.d/myboot.sh start观察:
- 是否打印
正在启动:xxx - 是否在
/tmp/myboot.log里生成日志(用cat /tmp/myboot.log查看) - 你的程序是否真的跑起来了(比如网页能打开、进程在运行)
如果失败,看/tmp/myboot.log里的错误信息,90%的问题出在这里:
No such file or directory→PROGRAM_PATH路径写错了Permission denied→ 忘了勾选“允许作为程序执行”Command not found→RUN_COMMAND写错了(比如该写python3却写了py)
5.2 重启前最后检查清单
| 检查项 | 正确样子 | 错误例子 |
|---|---|---|
| 脚本路径是否绝对完整 | /home/lin/文档/myscript.py | 文档/myscript.py(缺开头) |
| 脚本是否有执行权限 | ls -l /etc/init.d/myboot.sh显示x | 显示-rw-r--r--(没x) |
| 是否注册成功 | sudo ls /etc/rc2.d/ | grep myboot有结果 | 什么也不输出 |
| 日志里有没有报错 | cat /tmp/myboot.log有内容 | 文件为空或不存在 |
全部打钩,就可以放心重启了。
sudo reboot重启后,等桌面完全加载完毕(约30秒),去/tmp/myboot.log看一眼,如果有新内容,说明它真的自己跑起来了。
6. 卸载方法:后悔了?3秒撤回
万一你试完发现不需要,或者想换别的脚本,随时可以取消:
sudo update-rc.d -f myboot.sh remove sudo rm /etc/init.d/myboot.sh两行命令,干净利落,不留痕迹。
7. 常见问题直答(都是真实用户问过的)
7.1 为什么不用rc.local?听说更简单?
rc.local确实看起来简单,但它有个致命问题:Ubuntu 18.04+ 默认禁用它,且启用后容易和桌面环境冲突。很多用户按网上教程改了/etc/rc.local,结果开机卡在黑屏、进不了桌面。我们不拿你的日常使用冒险。
而update-rc.d是Ubuntu官方支持的、稳定运行十几年的老方法,兼容性最好,出问题也容易排查。
7.2 我的程序需要图形界面(比如弹窗、打开浏览器),能行吗?
可以,但要加个小判断。我们在脚本里已经预留了这段代码:
if [ -n "$DISPLAY" ]; then (sleep 3 && notify-send "开机启动成功" "...") & fi你只要把notify-send换成你想要的图形命令就行,比如:
if [ -n "$DISPLAY" ]; then (sleep 5 && firefox https://example.com &) & fi(注意:加sleep 5是为了让桌面完全就绪后再执行)
7.3 能不能开机启动多个脚本?
当然可以。每个脚本单独命名(myboot1.sh、myboot2.sh),重复本文流程即可。系统会按字母顺序启动它们。
7.4 提示“sudo: no tty present”怎么办?
这是脚本里用了sudo导致的。普通用户启动脚本,绝大多数情况根本不需要sudo。请检查你的PROGRAM_PATH是否指向了需要root权限的程序(比如监听80端口)。如果不是必要,请去掉脚本里的所有sudo,改用普通用户权限运行。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。