测试开机启动脚本权限设置详解,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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1198484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Seaborn 进阶:超越基础图表,深入统计建模可视化与高级定制

好的&#xff0c;遵照您的需求&#xff0c;以下是一篇关于 Seaborn 统计绘图的深度技术文章&#xff0c;专注于其统计模型可视化、高级定制化以及与 Matplotlib 的深度融合&#xff0c;并力求通过新颖的案例和深度的解析&#xff0c;满足开发者的阅读需求。Seaborn 进阶&#x…

亲测Qwen3-Reranker-0.6B:多语言检索效果超预期

亲测Qwen3-Reranker-0.6B&#xff1a;多语言检索效果超预期 1. 引言&#xff1a;为什么重排序模型正在成为RAG的关键拼图 在当前生成式AI广泛应用的背景下&#xff0c;越来越多企业选择通过检索增强生成&#xff08;RAG&#xff09;来提升大模型输出的准确性与可控性。但一个…

亲测科哥AI抠图镜像:发丝级人像分离效果惊艳,小白秒变高手

亲测科哥AI抠图镜像&#xff1a;发丝级人像分离效果惊艳&#xff0c;小白秒变高手 1. 为什么这款AI抠图工具值得你立刻上手&#xff1f; 你有没有遇到过这样的情况&#xff1a;一张特别好的人像照片&#xff0c;背景却杂乱无章&#xff1b;想做个电商主图&#xff0c;结果抠图…

效果惊艳!YOLO26镜像打造的工业质检案例展示

效果惊艳&#xff01;YOLO26镜像打造的工业质检案例展示 1. 引言&#xff1a;工业质检迎来AI革命 在现代制造业中&#xff0c;产品质量是企业的生命线。传统的人工质检方式不仅效率低、成本高&#xff0c;还容易因疲劳或主观判断导致漏检和误检。随着AI技术的发展&#xff0c…

从源码到UI:DeepSeek-OCR-WEBUI镜像让部署变得简单

从源码到UI&#xff1a;DeepSeek-OCR-WEBUI镜像让部署变得简单 1. 为什么OCR部署总是“看着简单&#xff0c;动手就卡”&#xff1f; 你有没有这样的经历&#xff1a;看到一个OCR项目介绍得天花乱坠&#xff0c;点进GitHub发现文档写得满满当当&#xff0c;结果自己一上手&am…

Z-Image-Turbo显存占用高?低成本GPU优化方案实战解决

Z-Image-Turbo显存占用高&#xff1f;低成本GPU优化方案实战解决 你是不是也遇到过这种情况&#xff1a;好不容易部署了Z-Image-Turbo这个号称“9步出图、1024高清”的文生图神器&#xff0c;结果一运行就爆显存&#xff1f;尤其是当你用的不是A100或RTX 4090这类顶级卡&#…

中文ITN实战:用FST ITN-ZH镜像高效规整语音文本

中文ITN实战&#xff1a;用FST ITN-ZH镜像高效规整语音文本 在语音识别&#xff08;ASR&#xff09;的实际应用中&#xff0c;一个常被忽视但极其关键的环节是——如何把“说出来的内容”变成“能用的数据”。比如用户说“二零零八年八月八日”&#xff0c;ASR输出的是文字没错…

HY-MT1.5-7B核心优势解析|附中药方剂多语言翻译实践案例

HY-MT1.5-7B核心优势解析&#xff5c;附中药方剂多语言翻译实践案例 在中医药国际化进程中&#xff0c;一个反复出现却长期被低估的瓶颈正日益凸显&#xff1a;专业术语的跨语言传递失真。当“半夏”被直译为“half summer”&#xff0c;当“炙甘草”变成“roasted licorice r…

Paraformer-large支持gRPC?高性能通信协议部署尝试

Paraformer-large支持gRPC&#xff1f;高性能通信协议部署尝试 1. 为什么需要gRPC&#xff1a;从Gradio到生产级服务的跨越 你有没有遇到过这种情况&#xff1a;在本地用Gradio搭了个语音识别界面&#xff0c;点点鼠标上传个音频就能出结果&#xff0c;演示起来挺像那么回事&…

BERT语义填空服务上线记:从镜像拉取到Web交互完整流程

BERT语义填空服务上线记&#xff1a;从镜像拉取到Web交互完整流程 1. 项目背景与核心价值 你有没有遇到过这样的场景&#xff1f;写文章时卡在一个成语上&#xff0c;只记得前半句&#xff1b;读古诗时看到一句“疑是地[MASK]霜”&#xff0c;心里知道答案却说不出来&#xf…

BERT填空服务用户体验差?界面交互优化实战解决方案

BERT填空服务用户体验差&#xff1f;界面交互优化实战解决方案 1. 痛点&#xff1a;功能强大&#xff0c;但用起来“卡手” 你有没有遇到过这种情况&#xff1a;一个模型明明很聪明&#xff0c;预测准、响应快&#xff0c;可一上手操作就让人皱眉&#xff1f; 我们最近上线的…

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

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

NewBie-image-Exp0.1镜像内部揭秘:transformer与vae模块加载机制

NewBie-image-Exp0.1镜像内部揭秘&#xff1a;transformer与vae模块加载机制 1. 引言&#xff1a;为什么需要深入模块加载机制&#xff1f; NewBie-image-Exp0.1 是一个专为高质量动漫图像生成设计的预置镜像&#xff0c;集成了完整的环境依赖、修复后的源码以及3.5B参数量级…

Retrieval-based-Voice-Conversion-WebUI终极指南:从零开始掌握AI语音转换技术

Retrieval-based-Voice-Conversion-WebUI终极指南&#xff1a;从零开始掌握AI语音转换技术 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI 语音数据小于等于10分钟也可以用来训练一个优秀的变声模型&#xff01; 项目地址: https://gitcode.com/GitHub_Trending/r…

MinerU能否识别手写体?扫描件增强处理实战

MinerU能否识别手写体&#xff1f;扫描件增强处理实战 1. 扫描文档提取的现实挑战 你有没有遇到过这种情况&#xff1a;一份重要的纸质材料&#xff0c;手写批注密密麻麻&#xff0c;或者扫描件模糊不清、对比度低&#xff0c;转成电子版时文字错乱、公式丢失&#xff0c;表格…

万物皆可分!SAM3文本引导分割技术深度解读

万物皆可分&#xff01;SAM3文本引导分割技术深度解读 1. 引言&#xff1a;从“抠图”到“万物分割”的跨越 你有没有遇到过这样的情况&#xff1f;想把一张照片里的某个物体单独提取出来&#xff0c;比如一只狗、一辆红色汽车&#xff0c;或者一件蓝色衬衫&#xff0c;但手动…

如何用AI创作古典音乐?NotaGen大模型镜像一键上手实践

如何用AI创作古典音乐&#xff1f;NotaGen大模型镜像一键上手实践 你是否曾幻想过&#xff0c;自己也能写出贝多芬式的交响乐、肖邦般的夜曲&#xff1f;过去&#xff0c;这需要多年的音乐训练和深厚的作曲功底。但现在&#xff0c;借助AI技术&#xff0c;普通人也能在几分钟内…

为什么选择BERT-base-chinese?轻量部署实战深度解析

为什么选择BERT-base-chinese&#xff1f;轻量部署实战深度解析 1. BERT 智能语义填空服务&#xff1a;让AI读懂中文上下文 你有没有遇到过一句话只差一个词&#xff0c;却怎么也想不起来的情况&#xff1f;比如“山高月小&#xff0c;水落石出”前面那句是什么&#xff1f;或…

Z-Image-Turbo功能详解:不只是快那么简单

Z-Image-Turbo功能详解&#xff1a;不只是快那么简单 1. 引言&#xff1a;为什么“快”只是开始&#xff1f; 你有没有经历过这样的场景&#xff1f;输入一段精心设计的提示词&#xff0c;按下回车后&#xff0c;屏幕卡住&#xff0c;进度条缓慢爬行&#xff0c;等了整整一分…

YOLOv10官方镜像REST API封装,快速对外服务

YOLOv10官方镜像REST API封装&#xff0c;快速对外服务 在工业质检、智能安防和自动驾驶等实时性要求极高的场景中&#xff0c;目标检测模型不仅要“看得准”&#xff0c;更要“反应快”。YOLOv10的发布正是为此而来——它通过消除NMS后处理&#xff0c;真正实现了端到端的高效…