测试开机启动脚本使用指南:让Linux服务随系统启动

测试开机启动脚本使用指南:让Linux服务随系统启动

在Linux系统中,我们经常需要让某些任务或服务在系统启动时自动运行,比如启动监控脚本、初始化环境变量、运行后台程序等。本文将围绕“测试开机启动脚本”这一实际需求,详细介绍几种稳定可靠的开机自启方案,帮助你轻松实现脚本随系统启动,无需手动干预。

无论你是运维人员、开发者,还是树莓派/工控机用户,掌握这些方法都能显著提升系统的自动化能力。我们将从最基础的脚本准备开始,逐步讲解不同机制的配置方式、适用场景及注意事项,确保你能根据实际环境选择最适合的方案。

1. 准备测试脚本

在配置开机启动之前,首先要准备好你要运行的脚本。以下是一个简单的测试脚本示例,用于验证脚本是否成功执行。

#!/bin/bash # test.sh cd /home/Desktop/ ls echo "OK!" exit 0

脚本说明:

  • 切换到桌面目录
  • 执行ls查看文件列表
  • 输出 “OK!” 表示脚本已运行
  • 正常退出(exit 0)

设置权限并测试运行:

chmod +x test.sh ./test.sh

确保脚本能正常执行后再进行后续配置。建议将脚本放置在一个固定路径下,如/home/username/Desktop/test.sh/opt/scripts/test.sh,避免路径问题导致启动失败。

2. 使用 /etc/init.d 方法(SysVinit 风格)

这是传统 Linux 系统中最常见的开机启动方式之一,适用于使用 SysVinit 的旧版 Ubuntu 或 Debian 系统。

操作步骤:

将脚本移入 init.d 目录
sudo mv test.sh /etc/init.d/
赋予可执行权限
sudo chmod 755 /etc/init.d/test.sh

建议不要使用 777,除非有特殊需求,安全起见推荐 755。

注册为开机启动项
sudo update-rc.d test.sh defaults

这会为脚本创建相应的符号链接,使其在系统启动和关闭时按默认优先级运行。

自定义启动优先级(可选)

如果你希望控制脚本的执行顺序,可以指定优先级数字:

sudo update-rc.d test.sh defaults 90

数字越大,执行越晚。例如 90 比 80 更晚执行。

移除开机启动

如果后续不再需要该脚本自启,可执行:

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

注意事项:

  • /etc/init.d脚本通常在系统早期阶段运行,可能早于图形界面加载。
  • 若脚本依赖桌面环境或用户登录状态,可能会失败。
  • 现代 Ubuntu 系统多采用 systemd,此方法兼容性有限,仅建议在老系统中使用。

3. 使用 gnome-session-properties(图形化自启)

对于桌面用户,尤其是使用 GNOME 桌面环境的 Ubuntu 用户,可以通过图形界面设置用户级别的开机自启动程序。

启动自启动管理器

打开终端,运行:

gnome-session-properties

你会看到一个图形窗口,列出当前用户的开机启动程序。

添加新启动项

点击“添加”按钮,填写以下信息:

  • 名称:Test Script
  • 命令gnome-terminal -x bash -c "/home/username/Desktop/test.sh; read"
  • 注释:运行测试脚本并保持终端打开

注意替换username为你的实际用户名。

命令解析:
  • gnome-terminal:打开终端窗口
  • -x bash -c:执行后面的命令字符串
  • read:防止终端立即关闭,便于查看输出结果

点击“添加”后,重启系统即可生效。

间接方式:通过 .bashrc 触发

你也可以将脚本调用写入~/.bashrc,并在自启动中仅启动终端:

# 在 ~/.bashrc 末尾添加 if [ -f /home/username/Desktop/test.sh ]; then /home/username/Desktop/test.sh fi

然后在gnome-session-properties中添加命令:

gnome-terminal

这样每次打开终端时都会自动执行脚本,适合调试场景。

适用场景:

  • 图形界面用户
  • 需要与桌面环境交互的脚本
  • 工控机设置自动登录+自动运行前端应用

4. 使用 rc.local 方法(通用性强)

rc.local是一个传统的系统级启动脚本,在大多数 Linux 发行版中都存在,且兼容性良好。

编辑 rc.local 文件

sudo nano /etc/rc.local

exit 0之前添加你的命令:

#!/bin/sh -e # # rc.local # # 添加你的脚本调用 su - username -c "cd /home/username/Desktop && ./test.sh" exit 0

必须确保rc.local文件本身具有执行权限,并且服务单元已启用(现代系统需额外配置)。

设置 rc.local 可执行

sudo chmod +x /etc/rc.local

对于使用 systemd 的系统,需启用 rc-local 服务

创建或编辑/etc/systemd/system/rc-local.service

[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target

启用服务:

sudo systemctl enable rc-local.service

注意事项:

  • rc.local在系统网络和服务初始化之后运行,但仍在用户登录前。
  • 若脚本涉及 GUI 或用户环境变量,需使用su - username显式切换用户。
  • 日志可通过journalctl -u rc-local查看,便于排查错误。

5. 推荐方案对比与选择建议

不同方法适用于不同的使用场景,以下是各方案的综合对比,帮助你做出合理选择。

方案适用系统执行时机是否需要图形界面安全性推荐指数
/etc/init.d+update-rc.dSysVinit 系统系统启动早期
gnome-session-propertiesGNOME 桌面系统用户登录后
rc.local大多数 Linux系统启动后期

选择建议:

  • 服务器/无界面设备:优先使用rc.local,简单稳定,兼容性好。
  • 桌面用户/工控机带屏设备:推荐gnome-session-properties,支持终端展示输出,便于调试。
  • 老旧系统维护:可继续使用/etc/init.d方式,但注意权限和路径问题。
  • 生产环境自动化部署:建议结合 Ansible 或 Shell 脚本统一配置rc.local

6. 常见问题与排查技巧

即使配置正确,有时脚本仍无法正常运行。以下是常见问题及其解决方案。

问题1:脚本未执行,无任何输出

  • 原因:路径错误、权限不足、环境变量缺失
  • 解决
    • 使用绝对路径调用脚本
    • 确保脚本有执行权限:chmod +x script.sh
    • 在脚本开头显式指定解释器:#!/bin/bash

问题2:脚本报错“Permission denied”

  • 原因:文件权限不足或 SELinux/AppArmor 限制
  • 解决
    • 检查所有父目录是否有读取权限
    • 使用ls -l确认脚本权限为-rwxr-xr-x
    • 临时禁用安全模块测试是否相关

问题3:脚本能手动运行,但开机不执行

  • 原因:缺少环境变量或工作目录不一致
  • 解决
    • 在脚本中显式切换目录:cd "$(dirname "$0")"
    • 使用完整路径调用依赖命令(如/bin/ls而非ls
    • 添加日志记录以便追踪:
      exec >> /tmp/startup.log 2>&1 echo "[$(date)] Starting test script..."

问题4:rc.local 不生效

  • 原因:systemd 未启用 rc-local 服务
  • 解决
    • 确认/etc/systemd/system/rc-local.service存在并启用
    • 运行sudo systemctl status rc-local查看状态
    • 检查日志:journalctl -u rc-local

获取更多AI镜像

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

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

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

相关文章

深度探索:OpenCode终端AI编程助手的架构设计与实战应用

深度探索:OpenCode终端AI编程助手的架构设计与实战应用 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手,模型灵活可选,可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode 在当今AI技术飞速发展…

无需API!用FRCRN语音降噪镜像打造全自动双语字幕流程

无需API!用FRCRN语音降噪镜像打造全自动双语字幕流程 1. 为什么需要一套完全离线的双语字幕方案 你有没有过这样的经历:想给一段外语视频配上中英双语字幕,却卡在第一步——找不到稳定、免费、不依赖网络的工具链?市面上大多数方…

手把手带你玩转SASM:汇编开发零门槛入门攻略

手把手带你玩转SASM:汇编开发零门槛入门攻略 【免费下载链接】SASM SASM - simple crossplatform IDE for NASM, MASM, GAS and FASM assembly languages 项目地址: https://gitcode.com/gh_mirrors/sa/SASM 还在为汇编语言环境的复杂配置而头疼吗&#xff1…

解锁Windows隐藏潜力:PowerToys生产力工具完全手册

解锁Windows隐藏潜力:PowerToys生产力工具完全手册 【免费下载链接】PowerToys Windows 系统实用工具,用于最大化生产力。 项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys 微软PowerToys是一套免费开源的Windows系统增强工具集合&a…

Paraformer-large语音识别服务化:REST API封装实战

Paraformer-large语音识别服务化:REST API封装实战 1. 从Gradio到生产级API:为什么需要服务化改造 你可能已经用过带Gradio界面的Paraformer-large语音识别镜像,上传音频、点击按钮、几秒后看到文字结果——简单直观,适合演示和…

iperf3网络测试实战:从入门到精通的完整指南

iperf3网络测试实战:从入门到精通的完整指南 【免费下载链接】iperf iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool 项目地址: https://gitcode.com/gh_mirrors/ip/iperf iperf3是一款专业的网络带宽测试工具,能够准确测量TC…

从口语到规范文本|利用FST ITN-ZH实现精准中文转换

从口语到规范文本|利用FST ITN-ZH实现精准中文转换 你有没有遇到过这样的情况:语音输入了一段文字,结果“二零零八年八月八日”原封不动地出现在文档里?或者听到别人说“早上八点半”,系统却无法自动转成标准时间格式…

电商设计福音!Z-Image-Turbo_UI界面快速产出白底图

电商设计福音!Z-Image-Turbo_UI界面快速产出白底图 对于电商运营和视觉设计师来说,商品主图的质量直接决定点击率与转化效果。而其中最基础、也最耗时的一环,就是将产品从原始拍摄背景中“剥离”出来,生成一张干净的白底图——传…

音乐播放器终极指南:体验Material Design 3风格的音乐之旅

音乐播放器终极指南:体验Material Design 3风格的音乐之旅 【免费下载链接】music-you 🪗 一个美观简约的Material Design 3 (Material You) 风格pc音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/mu/music-you 音乐是生活中的美好陪…

2026年AI图像修复趋势:fft npainting lama开源模型+弹性算力

2026年AI图像修复趋势:fft npainting lama开源模型弹性算力 1. 引言:图像修复进入“精准重绘”时代 你有没有遇到过这样的情况:一张珍贵的老照片上有划痕,或者截图里带着不想留的水印,又或者合影中出现了不该在的人&…

Manim数学动画框架:用代码绘制动态数学之美

Manim数学动画框架:用代码绘制动态数学之美 【免费下载链接】manim A community-maintained Python framework for creating mathematical animations. 项目地址: https://gitcode.com/GitHub_Trending/man/manim 还在为抽象的数学概念难以直观理解而苦恼&a…

如何用wangEditor表格解决企业数据展示难题:完整实践指南

如何用wangEditor表格解决企业数据展示难题:完整实践指南 【免费下载链接】wangEditor wangEditor —— 开源 Web 富文本编辑器 项目地址: https://gitcode.com/gh_mirrors/wa/wangEditor 在当今数据驱动的商业环境中,如何高效、美观地展示结构化…

餐厅环境评估:顾客满意度语音AI检测部署案例

餐厅环境评估:顾客满意度语音AI检测部署案例 1. 引言:用声音感知顾客情绪,重新定义餐厅体验管理 你有没有过这样的经历?走进一家餐厅,明明装修不错、菜品也还行,但就是感觉“哪里不对”——氛围冷清、服务…

为什么Sambert需要CUDA 11.8?GPU加速部署必要性解析

为什么Sambert需要CUDA 11.8?GPU加速部署必要性解析 1. Sambert多情感中文语音合成:不只是“能说话”那么简单 你有没有想过,AI生成的语音也能有喜怒哀乐?不是机械地念字,而是像真人一样带着情绪说话——高兴时语调上…

开源大模型应用落地:TurboDiffusion在教育领域的实践案例

开源大模型应用落地:TurboDiffusion在教育领域的实践案例 1. 引言:当AI视频生成走进课堂 你有没有想过,一节历史课上的“穿越”体验是什么样的?学生不仅能读到关于盛唐的文字描述,还能亲眼看到长安城的街市在眼前流动…

亲子互动新玩法:用Qwen镜像快速生成卡通动物形象

亲子互动新玩法:用Qwen镜像快速生成卡通动物形象 你有没有试过和孩子一起编故事,讲到一半卡壳,不知道接下来该说什么?或者想给孩子画个故事里的小动物,却发现自己手残画不出来?别担心,现在有了…

Qwen3-Embedding-4B为何总报错?环境配置问题排查教程

Qwen3-Embedding-4B为何总报错?环境配置问题排查教程 你是不是也在尝试部署 Qwen3-Embedding-4B 向量服务时频频遇到报错?明明代码看着没问题,但一调用就失败,返回空结果、连接拒绝,或者模型加载异常。别急&#xff0…

为何选择SenseVoiceSmall?多语言情感识别入门必看指南

为何选择SenseVoiceSmall?多语言情感识别入门必看指南 你有没有遇到过这样的问题:一段语音里,除了说话内容,还藏着情绪、背景音乐甚至笑声掌声,但传统语音转文字工具只能告诉你“说了什么”,却无法感知“怎…

3步零基础打造p5.js音乐可视化:让代码与旋律共舞 ✨

3步零基础打造p5.js音乐可视化:让代码与旋律共舞 ✨ 【免费下载链接】p5.js p5.js is a client-side JS platform that empowers artists, designers, students, and anyone to learn to code and express themselves creatively on the web. It is based on the co…

用GLM-ASR-Nano-2512做的语音转写项目,效果超预期

用GLM-ASR-Nano-2512做的语音转写项目,效果超预期 最近我接手了一个语音转写的小项目,目标是把团队内部的会议录音自动转成文字,方便后续整理纪要和检索关键信息。一开始我们试了几个在线服务,但问题很明显:上传音频有…