news 2026/4/15 18:49:44

如何让.sh脚本开机自动运行?这份教程请收好

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何让.sh脚本开机自动运行?这份教程请收好

如何让.sh脚本开机自动运行?这份教程请收好

你是不是也遇到过这样的问题:写好了自动化任务脚本,每次重启后还得手动执行一遍?明明只需要让它“悄悄开工”就行,却卡在了开机自启这一步。别急,这篇教程就是为你准备的——不讲虚的,不堆术语,从创建脚本到验证结果,每一步都贴着实际操作走,连权限怎么设、文件在哪改、重启后怎么看效果,全都给你列清楚。

本文基于常见的Linux发行版(如Ubuntu 20.04/22.04等)环境编写,适用于大多数桌面或服务器场景。无论你是刚接触Linux的新手,还是想快速解决一个具体问题的开发者,都能照着做、马上用、一次成功。

1. 先写一个能跑起来的.sh脚本

脚本能不能自动运行,前提是它自己得先能手动跑通。所以第一步不是去改系统配置,而是把你要做的事,用最简单的方式写成一个可执行的shell文件。

1.1 创建脚本文件

推荐放在你自己的用户目录下,比如:

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

这里用nano编辑器(比vim更友好),你也可以用vimgedit,看习惯。文件名随意,但建议用英文+下划线,避免空格和中文。

1.2 写入脚本内容

把下面这段代码完整复制进去(注意:第一行必须是#!/bin/bash,一个字母都不能错):

#!/bin/bash # 记录启动时间,方便验证是否真的执行了 echo "Script started at $(date)" >> ~/startup_log.txt # 进入某个目录(示例:假设你有个项目在~/myproject) cd /home/$USER/myproject 2>/dev/null || echo "Directory not found, skipping cd" # 执行你想做的操作,比如启动一个程序、生成一个文件、发送通知等 echo "Hello from auto-start script!" > ~/hello_from_boot.txt # 可选:打印一句提示(只在终端手动运行时可见,开机自启时看不到) echo " Auto-start script completed"

小贴士:

  • $(date)会自动插入当前时间,这样你一看startup_log.txt就知道是哪次启动触发的;
  • 2>/dev/null意思是“把错误信息藏起来”,避免路径不存在时报错打断流程;
  • >>是追加写入,>是覆盖写入,日志类建议用>>
  • $USER会自动替换成你的用户名,比硬写/home/yourname更通用。

1.3 保存并测试脚本

Ctrl+O→ 回车(保存),再按Ctrl+X(退出nano)。
然后给它加上执行权限:

chmod +x ~/scripts/auto_start_demo.sh

现在手动运行试试:

~/scripts/auto_start_demo.sh

检查一下有没有生成~/hello_from_boot.txt~/startup_log.txt,内容对不对。如果没问题,说明脚本本身完全OK——这是后续所有步骤的基础。

2. 选择最适合你系统的自启方式

Linux没有统一的“开机自启标准”,不同版本、不同桌面环境,支持的方法不一样。我们不搞一刀切,而是分情况说明,你对照自己系统选一个就行。

2.1 方法一:通过systemd服务(推荐 · Ubuntu 16.04+ / Debian 8+)

这是目前最主流、最稳定、最可控的方式,尤其适合服务器或无图形界面的环境。它能精确控制启动时机、失败重试、日志查看,还不会被桌面环境干扰。

创建服务文件
sudo nano /etc/systemd/system/auto-start-script.service

粘贴以下内容(注意替换YourUserName为你真实的用户名):

[Unit] Description=Run my auto-start script at boot After=multi-user.target [Service] Type=oneshot User=YourUserName ExecStart=/home/YourUserName/scripts/auto_start_demo.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target

关键点说明:

  • User=YourUserName:必须填你自己的用户名,不能写root(除非你真要以root身份运行);
  • Type=oneshot:表示这个服务只运行一次,适合脚本;
  • RemainAfterExit=yes:让systemd认为服务“还在运行”,方便状态查询;
  • After=multi-user.target:确保网络、文件系统等基础服务就绪后再执行。
启用并测试服务
# 重新加载配置 sudo systemctl daemon-reload # 启用开机自启 sudo systemctl enable auto-start-script.service # 立即运行一次(不用重启) sudo systemctl start auto-start-script.service # 查看运行状态和日志 sudo systemctl status auto-start-script.service sudo journalctl -u auto-start-script.service -n 20 --no-pager

如果看到active (exited)和你脚本里写的日志,说明已就位。下次重启就会自动触发。

2.2 方法二:通过/etc/rc.local(传统方式 · 适用于老版本或精简系统)

有些旧版Ubuntu(如16.04)默认保留了rc.local,但新版(18.04+)默认不启用。如果你确认系统里有/etc/rc.local且能编辑,可以用这个方法——它简单直接,适合快速验证。

检查rc.local是否存在且可用
ls -l /etc/rc.local

如果显示No such file or directory,跳过本节;如果存在但权限是-rwxr-xr-x,说明已启用,直接编辑;如果是-rw-r--r--,需要先加执行权限:

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

exit 0这一行之前,添加你的脚本调用命令:

# 在 exit 0 前插入这一行 su -c "/home/YourUserName/scripts/auto_start_demo.sh" -s /bin/sh YourUserName

完整的/etc/rc.local应该长这样(省略注释):

#!/bin/sh -e # # rc.local # # 自定义启动脚本 su -c "/home/YourUserName/scripts/auto_start_demo.sh" -s /bin/sh YourUserName exit 0

注意:

  • 必须用su -c切换到普通用户执行,避免脚本以root身份运行导致权限混乱;
  • exit 0必须保留,且必须在最后一行,否则系统可能卡在启动过程。
验证rc.local是否生效
sudo /etc/rc.local

运行后检查~/startup_log.txt是否新增了一条记录。如果有,说明配置正确。

2.3 方法三:通过用户级启动(桌面环境专用 · GNOME/KDE/XFCE)

如果你用的是带图形界面的Ubuntu、Linux Mint等,且脚本只需在你登录桌面后运行(比如启动一个托盘程序、挂载网盘),那用“启动应用程序”最安全、最轻量。

图形界面操作(GNOME为例)
  1. 打开“设置” → “开机启动”(或搜索“Startup Applications”)
  2. 点击“添加”
  3. 名称填My Auto Script,命令填:
    /home/YourUserName/scripts/auto_start_demo.sh
  4. 点击“添加”

完事。下次你输入密码登录桌面时,脚本就会自动跑起来。

优势:无需sudo权限,不影响系统其他用户,出问题也不会拖慢整个启动流程。

3. 验证是否真的成功了

光改完配置不算完,一定要亲眼看到效果才算落地。这里提供几个简单可靠的验证方法。

3.1 检查日志文件(最直接)

前面脚本里写了:

echo "Script started at $(date)" >> ~/startup_log.txt

重启后,打开终端,输入:

cat ~/startup_log.txt

如果看到类似这样的内容:

Script started at Mon Jun 10 09:23:45 CST 2024 Script started at Mon Jun 10 09:41:12 CST 2024

说明脚本确实在两次启动时都执行了。时间戳就是铁证。

3.2 检查输出文件是否存在

脚本里还生成了:

echo "Hello from auto-start script!" > ~/hello_from_boot.txt

重启后,直接看文件:

ls -l ~/hello_from_boot.txt cat ~/hello_from_boot.txt

如果文件存在且内容正确,100%成功。

3.3 查看systemd服务状态(仅限方法一)

systemctl status auto-start-script.service

重点关注两行:

  • Active:后面是active (exited)表示成功运行过;
  • Loaded:后面是enabled表示已设置为开机自启。

如果显示failed,用下面命令看详细错误:

journalctl -u auto-start-script.service --since "1 hour ago" --no-pager

常见错误:路径写错、权限不够、用户没填对——日志里基本都写明了。

4. 常见问题与避坑指南

实际操作中,90%的问题都出在细节上。这里把大家踩过的坑集中列出来,帮你绕开。

4.1 脚本执行了,但文件没生成?可能是路径问题

  • ❌ 错误写法:cd ~/myproject——~在systemd或rc.local里不展开,会被当成字面量;
  • 正确写法:cd /home/YourUserName/myprojectcd $HOME/myproject$HOME在多数环境下可识别)。

4.2 提示“Permission denied”?

  • 检查脚本权限:ls -l ~/scripts/auto_start_demo.sh,必须有x(执行)标志;
  • 如果用systemd,确认User=字段填的是你自己的用户名,不是root
  • 如果用rc.local,确认su -c命令里的用户名拼写完全一致。

4.3 脚本里调用了GUI程序(比如geditfirefox)不弹窗?

  • systemd服务默认没有图形会话环境,GUI程序无法显示;
  • 解决方案:改用“用户级启动”(方法三),或者在systemd服务里显式指定环境变量:
[Service] Environment="DISPLAY=:0" Environment="XAUTHORITY=/home/YourUserName/.Xauthority"

但强烈建议:GUI类任务优先走桌面启动项,更稳妥。

4.4 重启后发现系统变慢,或卡在紫色屏幕?

  • 很可能是rc.local里某条命令卡住没返回(比如ping -c 4 google.com但网络不通);
  • 解决办法:在rc.local里所有外部命令后加超时,例如:
    timeout 10s /home/YourUserName/scripts/auto_start_demo.sh || true

5. 总结:选对方法,一次搞定

到这里,你应该已经掌握了让.sh脚本开机自动运行的全部核心方法。我们来快速回顾一下关键决策点:

  • 如果你用的是较新Ubuntu(18.04+)、Debian或服务器环境 → 选systemd服务:最规范、最可靠、日志最全;
  • 如果你确认/etc/rc.local存在且能编辑 → 用rc.local:最快上手,适合临时验证或老系统;
  • 如果你只是想登录桌面后自动运行 → 用“开机启动应用程序”:最安全,零风险,图形程序首选。

无论选哪种,记住三个铁律:
1⃣ 脚本先手动跑通;
2⃣ 路径写绝对路径,别依赖~
3⃣ 每次修改后,用日志或输出文件验证,别猜。

现在,关掉这篇教程,打开你的终端,花3分钟试一遍。你会发现,所谓“开机自启”,根本不是什么黑科技,而是一套清晰、可复现、人人能掌握的常规操作。


获取更多AI镜像

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

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

算力停机隐形危机,GPU维修中心为百万资产护航

在人工智能与大模型飞速发展的今天,算力已成为驱动业务创新的核心引擎。然而,在数据中心高速运转的背后,一个不可忽视的危机正在潜伏——高端算力基础设施的故障。当一台价值百万的H100或B200服务器突然宕机,对于任何一家AI企业或…

作者头像 李华
网站建设 2026/4/14 20:46:57

Qwen2.5-7B-Instruct惊艳效果:数学证明推导+LaTeX公式渲染实例

Qwen2.5-7B-Instruct惊艳效果:数学证明推导LaTeX公式渲染实例 1. 模型能力概览 Qwen2.5-7B-Instruct是通义千问最新发布的指令调优大语言模型,在数学推理和学术写作方面展现出令人印象深刻的能力。这个76亿参数的模型通过专业训练,在以下关…

作者头像 李华
网站建设 2026/4/16 5:29:07

BAAI/bge-m3节省90%成本:无GPU环境下高效运行部署案例

BAAI/bge-m3节省90%成本:无GPU环境下高效运行部署案例 1. 为什么你需要一个“不用GPU也能跑得飞快”的语义分析工具? 你有没有遇到过这样的问题:想给自己的知识库加个RAG检索功能,却发现光是部署一个嵌入模型,就得租…

作者头像 李华
网站建设 2026/4/16 13:35:28

告别复杂PS:InstructPix2Pix教你用英语指令修图

告别复杂PS:InstructPix2Pix教你用英语指令修图 你有没有过这样的时刻: 想把朋友圈那张阳光灿烂的旅行照,改成雨天氛围,但打开Photoshop发现图层蒙版还没搞明白; 想给客户提案里的产品图加个“科技蓝光效”&#xff0c…

作者头像 李华
网站建设 2026/4/14 6:35:00

YOLO11性能全测评,不同硬件表现对比

YOLO11性能全测评,不同硬件表现对比本文不涉及任何政治、历史、社会敏感议题,内容严格限定于YOLO11模型在标准计算机视觉任务下的跨硬件推理性能实测分析,所有数据均基于公开可复现的COCO验证集与统一测试流程。1. 为什么需要一次真实的硬件性…

作者头像 李华
网站建设 2026/4/16 13:44:36

微信联系作者!fft npainting lama技术支持获取方式

微信联系作者!FFT NPainting LAMA图片重绘修复镜像使用指南 你是否遇到过这些情况:一张珍贵的老照片上有划痕和污渍,想修复却不会PS;电商主图上水印太碍眼,手动抠图耗时又不自然;设计稿里某个元素需要临时…

作者头像 李华