news 2026/4/20 4:06:37

测试开机启动脚本权限设置详解,chmod一步到位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
测试开机启动脚本权限设置详解,chmod一步到位

测试开机启动脚本权限设置详解,chmod一步到位

1. 开机自启脚本的核心问题:权限与执行环境

你有没有遇到过这样的情况:写好了一个启动脚本,配置了开机自动运行,结果重启后发现什么都没发生?
不是脚本没执行,而是权限不足执行环境不匹配导致的静默失败。

在 Linux 系统中,尤其是 Ubuntu 这类基于 systemd 的发行版,一个脚本能否顺利在开机时运行,关键在于两点:

  • 可执行权限是否正确设置
  • 脚本路径和调用方式是否符合系统启动机制的要求

本文将围绕“测试开机启动脚本”这一实际需求,深入讲解如何通过chmod正确设置权限,并结合主流方法实现稳定可靠的开机自启。


2. 脚本准备:从一个简单的测试脚本开始

我们先创建一个用于验证的测试脚本,内容如下:

#!/bin/bash # test.sh - 简单的开机测试脚本 cd /home/Desktop/ ls echo "OK!" >> /home/Desktop/boot_test.log exit 0

注意:这里我们将输出重定向到日志文件,便于后续检查脚本是否真正执行成功。

保存为test.sh,放在/home/Desktop/目录下。此时它只是一个普通文本文件,还不能直接执行。

2.1 权限设置:chmod 755 还是 777?

要让脚本可执行,必须使用chmod命令赋予执行权限。

常见的做法是:

sudo chmod 755 test.sh

但有些人图省事会用:

sudo chmod 777 test.sh

虽然两者都能让脚本运行起来,但从安全角度出发,推荐使用 755

  • 755:所有者可读写执行,组用户和其他人仅可读和执行
  • 777:所有人完全开放,存在安全隐患

除非有特殊共享需求,否则不要随意使用 777。


3. 方法一:通过 /etc/init.d 实现传统 SysVinit 自启(兼容性高)

这是最经典的一种方式,适用于仍保留 SysVinit 兼容层的系统。

3.1 移动脚本并设置权限

将脚本移动到系统服务目录:

sudo mv test.sh /etc/init.d/test.sh

然后设置权限:

sudo chmod 755 /etc/init.d/test.sh

即使原始脚本已设权限,移动后也需重新确认,因为文件属性可能变化。

3.2 注册为开机任务

使用update-rc.d将其注册为开机启动项:

sudo update-rc.d test.sh defaults

这会在各个运行级别下创建相应的符号链接,确保脚本在系统启动时被执行。

设置启动优先级(可选)

如果你希望控制脚本的执行顺序,比如等网络服务启动后再运行,可以指定优先级:

sudo update-rc.d test.sh defaults 90

数字越大,执行越晚。默认范围通常是 20~80,90 属于较晚执行。

删除注册(调试时常用)

如果需要移除该启动项:

sudo update-rc.d -f test.sh remove

-f表示强制删除相关链接。


4. 方法二:利用 GNOME 桌面环境的“启动应用程序”功能(适合带 GUI 的场景)

对于桌面用户,特别是工控机、展示机等需要自动登录并运行脚本的场景,可以通过图形化工具配置。

4.1 打开启动应用程序管理器

运行以下命令打开设置界面:

gnome-session-properties

点击“添加”,填写信息:

  • 名称:Test Script
  • 命令gnome-terminal -x bash -c "/home/Desktop/test.sh; read"
  • 备注:测试开机脚本执行

read的作用是防止终端闪退,方便查看输出结果。

4.2 自动登录设置(提升可靠性)

由于此方法依赖桌面环境,建议启用自动登录:

  1. 打开“用户账户”设置
  2. 启用“自动登录”
  3. 重启后即可无需手动登录自动触发脚本

这种方式的优点是调试直观,缺点是必须进入桌面环境才能执行。


5. 方法三:使用 rc.local(简单直接,但需注意细节)

rc.local是一个传统的启动脚本,在大多数现代 Ubuntu 版本中仍然可用(需手动启用)。

5.1 编辑 rc.local 文件

打开文件:

sudo nano /etc/rc.local

exit 0之前添加你的命令:

cd /home/Desktop && ./test.sh &

注意:

  • 必须保证/home/Desktop/test.sh具备执行权限
  • 使用&放入后台,避免阻塞系统启动
  • 路径尽量使用绝对路径更稳妥

5.2 确保 rc.local 可执行

检查/etc/rc.local是否有执行权限:

sudo chmod 755 /etc/rc.local

某些系统默认没有启用rc-local.service,需手动激活:

sudo systemctl enable rc-local

5.3 常见问题排查

  • 如果脚本未执行,请查看日志:sudo journalctl -u rc-local
  • rc.local在用户登录前运行,访问/home下的文件可能受限,建议将脚本移至/opt/usr/local/bin

6. 方法对比与选择建议

方法适用场景是否需要 GUI安全性调试难度推荐指数
/etc/init.d+update-rc.d服务器/无界面设备
gnome-session-properties桌面应用/展示机
rc.local快速验证/简单任务

6.1 如何选择?

  • 追求稳定性与兼容性→ 选/etc/init.d
  • 主要用于桌面环境→ 选 GNOME 启动应用
  • 临时测试或快速部署→ 用rc.local

7. 关键知识点补充:update-rc.d 参数详解

update-rc.d并不只是个“注册”工具,它的参数非常灵活。

7.1 基本语法格式

update-rc.d [选项] <脚本名> <指令> [参数]

常见指令包括:

指令说明
defaults使用默认启动级别(S 和 K),通常为 20
remove移除所有符号链接
disable [等级]禁用指定运行级别的启动
enable [等级]启用指定运行级别的启动
start <NN> <levels>在指定级别以顺序 NN 启动
stop <NN> <levels>在指定级别以顺序 NN 停止

7.2 实际示例

只在运行级别 3、5 中启用,且启动顺序为 85:

sudo update-rc.d test.sh start 85 3 5

禁用运行级别 2 的自动启动:

sudo update-rc.d test.sh disable 2

7.3 调试技巧:模拟操作(-n 参数)

使用-n可以预览操作而不实际执行:

sudo update-rc.d -n test.sh defaults

输出类似:

Adding system startup for /etc/init.d/test.sh ... /etc/rc0.d/K20test.sh -> ../init.d/test.sh /etc/rc1.d/K20test.sh -> ../init.d/test.sh /etc/rc2.d/S20test.sh -> ../init.d/test.sh ...

这样可以提前确认生成的链接是否正确。


8. 总结:chmod 不是万能的,但不可或缺

8.1 核心要点回顾

  1. 脚本必须具备执行权限chmod 755是最佳实践,避免滥用777
  2. 不同方法对执行环境要求不同rc.local在登录前运行,注意路径和权限上下文
  3. 推荐优先使用/etc/init.d+update-rc.d:结构清晰、日志完整、易于维护
  4. 桌面环境可用 GNOME 启动应用:适合非技术人员维护的展示设备
  5. 务必添加日志输出:用>> log.txtlogger记录执行状态,便于排错

8.2 最佳实践建议

  • 将脚本统一存放在/usr/local/bin//opt/scripts/,避免放在用户目录
  • 使用绝对路径调用脚本和资源
  • 添加错误捕获和日志记录机制
  • 测试阶段开启详细输出,生产环境适当精简

获取更多AI镜像

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

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

IQuest-Coder-V1性能优化:高并发请求下的GPU利用率提升方案

IQuest-Coder-V1性能优化&#xff1a;高并发请求下的GPU利用率提升方案 IQuest-Coder-V1-40B-Instruct 是一款专为软件工程与竞技编程场景打造的大型语言模型&#xff0c;具备强大的代码生成、推理和工具调用能力。在实际部署中&#xff0c;尤其是在高并发服务场景下&#xff…

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

RPCS3模拟器汉化实战:从语言障碍到中文畅玩

RPCS3模拟器汉化实战&#xff1a;从语言障碍到中文畅玩 【免费下载链接】rpcs3 PS3 emulator/debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 还在为PS3游戏的外语界面而困扰吗&#xff1f;是否曾因语言不通而错过众多经典作品&#xff1f;现在&…

作者头像 李华
网站建设 2026/4/17 15:53:40

从SAM到sam3升级版|看提示词驱动的万物分割新范式

从SAM到sam3升级版&#xff5c;看提示词驱动的万物分割新范式 1. 引言&#xff1a;从“点选分割”到“一句话分割”的跨越 你还记得第一次用AI做图像分割时的场景吗&#xff1f;可能是在一张图上手动画框&#xff0c;或者逐个点击目标区域&#xff0c;等模型一点点把物体抠出…

作者头像 李华
网站建设 2026/4/17 17:50:46

MinerU支持消息队列吗?异步任务调度集成实战

MinerU支持消息队列吗&#xff1f;异步任务调度集成实战 1. 引言&#xff1a;从单机运行到生产级异步处理 你有没有遇到过这样的场景&#xff1a;PDF文件太多&#xff0c;一个接一个地跑提取任务&#xff0c;等得不耐烦&#xff1f;或者在网页端上传文档后&#xff0c;页面卡…

作者头像 李华
网站建设 2026/4/18 14:52:01

通义千问3-14B显存溢出?RTX4090 24GB适配实战解决方案

通义千问3-14B显存溢出&#xff1f;RTX4090 24GB适配实战解决方案 你是不是也遇到过这种情况&#xff1a;明明手握RTX 4090 24GB这种顶级消费级显卡&#xff0c;结果一跑Qwen3-14B就提示“CUDA out of memory”&#xff1f;别急&#xff0c;这问题太常见了。很多人以为“单卡可…

作者头像 李华
网站建设 2026/4/17 16:33:57

程序这东西,想的即使在完善,也有想不到的地方。。

前几天给xray增加了一个端口转发功能&#xff0c;再次基础上增加IP白名单机制&#xff0c;这样就不用授权访问了&#xff0c;因为浏览器内核不支持授权功能的socks&#xff0c;所以就做了这么个IP白名单机制的TCP转发 在运行了N天之后&#xff0c;发现了这么个BUG&#xff0c;…

作者头像 李华