RK3588使用笔记:设置程序/服务开机自启
一、前言
一般将系统用作嵌入式设备时肯定要布置某些程序,这时候就需要对程序设置开机自己,否则每次都要人为启动,当有些嵌入式系统未连接显示屏或者无桌面环境去操作启动程序时,程序自启就是必须的了,本文介绍在纯linux系统下开机自启方法,还有Ubuntu/麒麟系统下程序和服务开机自启的方法
目录
纯linux下qt程序开机自启
ubuntu/麒麟系统qt程序开机自启
ubuntu/麒麟系统服务开机自启
二、环境
RK3588(linux5.10.66+debian/ubuntu/麒麟是桌面文件系统)
调试笔记本window10,安装常用工具winscp,xshell,finalshell,secureRTP等等
VMware17+Ubuntu20.04源码开发环境(这里就依赖于各个硬件平台的厂家提供资料了)
三、正文
纯linux下qt程序开机自启
在目标设备中直接操作etc/init.d/S99autorun.sh文件,如果想编译的镜像就设置好,就去源码包中找到文件系统,需要挂载文件系统,之后进入文件系统对自启动配置进行更改。在外部命令创建etc/init.d/S99autorun.sh文件,在指定打开loop.sh,再打开指定程序
最后程序权限别忘记了设置,至少得+x,我都是777 使用chmod命令
相关文件内容:
S99autorun.sh
#!/bin/bash
source /root/loop.sh &
loop.sh
#! /bin/sh
echo "starting kbqSource... "
./root/workspace/Testdemo &
exit 0
本方法是开机系统默认启动S99autorun.sh(这里不同厂家的设备可能会略微有区别)
之后打开指定路径的loop.sh脚本
之后再通过脚本启动指定路径的程序文件(程序要有执行权限)
大功告成
ubuntu/麒麟系统qt程序开机自启
在root用户下操作
进入/etc/xdg/autostart
创建一个test.desktop文件,文件名不一定必须是test,可以更改,后缀不能变
修改test.desktop文件,内容如下:
[Desktop Entry]
#软件文字编码
Encoding=UTF-8
#软件名称
Name=CAN调试助手
#软件类型(固定)
Type=Application
#软件位置,应用程序可执行文件的绝对路径
Exec=/root/workspace/RK3588porttest_CAN
#软件启动是否在终端中运行
Terminal=true
#是否应该在应用程序启动时显示通知
StartupNotify=true
#软件图标,图标的绝对路径
Icon=/root/workspace/logo200x200.png
#软件隐藏、不显示
Hidden=false
NoDisplay=false
#软件描述说明
Comment=这事一个说明,CAN调试助手工具,拥有美观的界面和舒适的操作.
#软件版本
Version=1.0.0
#设置为true,使得这个.desktop文件在GNOME桌面环境中生效。
X-GNOME-Autostart-enabled=true
# 主要用于菜单展示归类
Categories=Application;Development;
将test.desktop复制到/usr/share/applications/中也就制作了一个快捷方式(在开始菜单中显示)。
最后再将程序放在指令路径下,别忘记了加权限
这个方式同样也适合在源码中文件系统随系统打包好
总结:
/etc/xdg/autostart路径下的desktop文件是能够自启的程序(这里必须有desktop文件)
/usr/share/applications路径下的desktop文件是能够放在菜单界面显示的程序(这里可以没有,不影响开机自启)
test.desktop赋值权限777后可以在桌面环境双击运行,双击运行时Terminal=true则开启终端
也可以将desktop文件放在/usr/share/applications路径下,然后通过系统的设置开机自启功能中选择自启软件
自启效果

ubuntu/麒麟系统服务开机自启
有的时候系统自启的外部软件不一定非得是qt程序,也有可能是启动某种后台服务,这个时候就要设置服务开机自启
这里我以自动启动python程序为例,通过设置自启服务的方式去打开,而不是使用desktop自启文件,当然qt程序也可以不用desktop自启文件而使用服务,因为服务中有崩溃自启机制,当程序崩溃后可以自动重启软件
下面介绍后台运行的 Python 程序(如服务、守护进程)自动启动方法
1. 创建 systemd 服务文件
sudo vim /etc/systemd/system/SY_pytest_redis_matplotlib.service
内容示例(根据实际路径修改):
[Unit]
Description=My Python Application
After=network.target[Service]
#User=kylin # 改为你的用户名
Type=simple
WorkingDirectory=/root/workspace
ExecStart=/usr/bin/python /root/workspace/pytest_redis_matplotlib.py
Restart=always # 崩溃后自动重启
RestartSec=5 # 服务崩溃等待5秒重启,若没有此属性,默认1秒重启,必须有Restart=always
Environment="PYTHONUNBUFFERED=1" # 确保日志实时输出[Install]
WantedBy=multi-user.target
2. 启用服务
sudo systemctl daemon-reload
sudo systemctl enable SY_pytest_redis_matplotlib # 开机自启
sudo systemctl start SY_pytest_redis_matplotlib # 立即启动
3.验证状态
sudo systemctl status SY_pytest_redis_matplotlib
确保服务状态为active (running)
# 查看日志(实时)
journalctl -u SY_pytest_redis_matplotlib -f
# 查看日志(历史)
journalctl -u SY_pytest_redis_matplotlib -xe --no-pager
取消自启并彻底移除服务
# 禁用开机自启(必须步骤)
sudo systemctl disable <服务名>.service
# 停止正在运行的服务
sudo systemctl stop <服务名>.service
# 删除服务文件(可选)
sudo rm /etc/systemd/system/<服务名>.service
# 重新加载 systemd
sudo systemctl daemon-reload
# 检查是否已禁用
systemctl is-enabled <服务名> # 应显示 "disabled"
# 检查服务状态
systemctl status <服务名> # 应显示 "inactive (dead)"
这里我让AI帮我生成多个服务开启使用server_setautostart.sh脚本,将服务文件复制到/etc/systemd/system/
赋值脚本权限chmod +x server_setautostart.sh
执行脚本bash server_setautostart.sh
这样所有服务就全部自动配置完启动了(顺利的话)
server_setautostart.sh内容如下:
#!/bin/bash
# 定义服务列表
SERVICES=("SY_pytest_redis_matplotlib""SY_pytest_redis_numpy""SY_pytest_redis_pandas""SY_pytest_redis_scikitlearn""SY_pytest_redis_tensorflow"
)
# 遍历所有服务,依次检查、启用并启动
for service in "${SERVICES[@]}"; doSERVICE_FILE="/etc/systemd/system/${service}.service"echo "正在设置服务: $service"# 检查服务文件是否存在if [ ! -f "$SERVICE_FILE" ]; thenecho "❌ 错误:服务文件 $SERVICE_FILE 不存在,请检查!"continue # 跳过当前服务fi# 重新加载 systemd(避免修改后未生效)sudo systemctl daemon-reload# 启用开机自启sudo systemctl enable "$service"if [ $? -eq 0 ]; thenecho "✅ $service 开机自启设置成功"elseecho "❌ $service 开机自启设置失败,请检查服务文件配置"continuefi# 立即启动服务sudo systemctl start "$service"if [ $? -eq 0 ]; thenecho "✅ $service 启动成功"elseecho "❌ $service 启动失败,请查看日志: journalctl -u $service -xe"fiecho "----------------------------------------"
doneecho "所有服务设置完成!"
四、结语
随着时代的发展,在工作中用到了越来越多的AI,帮助工作提升了很大的效率,但我认为AI只能作为人类的工具,逐步取代其他落后的工具,AI的出现让很多技术实现起来并不需要最专业的人士,对以往的高端顶尖人才肯定是有打击,适合大部分对专业了解一些的人和几年工龄的工程师,使用AI的前提就是知道如何问问题,让AI给出你的答案,整体来说,AI肯定会推进人类进步,这也是人类几十年的积累,厚积薄发。我的文章可能会被AI索引,作为几万分之一的一个小数据,最后总结出来最精华的部分给需要的人,也希望我的文章能够直接帮助到有需要的人。
继续努力前进吧骚年,在不努力普通工程师很可能被普通外行人随便替代了
相关文章:
RK3588使用笔记:设置程序/服务开机自启
一、前言 一般将系统用作嵌入式设备时肯定要布置某些程序,这时候就需要对程序设置开机自己,否则每次都要人为启动,当有些嵌入式系统未连接显示屏或者无桌面环境去操作启动程序时,程序自启就是必须的了,本文介绍在纯li…...
Python-数据处理
第十五章 生成数据 安装Matplotlib:通过pip install matplotlib命令安装库。绘制折线图的核心语法为: import matplotlib.pyplot as plt x_values [1, 2, 3] y_values [1, 4, 9] plt.plot(x_values, y_values, linewidth2) plt.title(&quo…...
LoRA技术全解析:如何用4%参数量实现大模型高效微调
引言 在当今的人工智能领域,大型语言模型(LLM)已经成为革命性的技术。然而,这些模型通常拥有数十亿个参数,全量微调成本极高。本文将为初级开发者详细讲解LoRA(Low-Rank Adaptation)技术&#…...
职测-言语理解与表达
成语填空 成语的误用 误用①:望文生义【按成语的字面意思去理解,导致误用】 成语解释如数家珍对列举的事物或叙述的故事十分熟悉,但熟悉的对象不能是自己收藏的宝贝目无全牛比喻技术熟练到得心应手的境地登堂入室比喻学问或技艺由浅入深&a…...
深度学习处理文本(2)
建立词表索引 将文本拆分成词元之后,你需要将每个词元编码为数值表示。你可以用无状态的方式来执行此操作,比如将每个词元哈希编码为一个固定的二进制向量,但在实践中,你需要建立训练数据中所有单词(“词表”&…...
python实现股票数据可视化
最近在做一个涉及到股票数据清洗及预测的项目,项目中需要用到可视化股票数据这一功能,这里我与大家分享一下股票数据可视化的一些基本方法。 股票数据获取 目前,我已知的使用python来获取股票数据方式有以下三种: 爬虫获取,实现…...
JavaScript DOM与元素操作
目录 DOM 树、DOM 对象、元素操作 一、DOM 树与 DOM 对象 二、获取 DOM 元素 1. 基础方法 2. 现代方法(ES6) 三、修改元素内容 四、修改元素常见属性 1. 标准属性 2. 通用方法 五、通过 style 修改样式 六、通过类名修改样式 1. className 属…...
ARM向量表
向量表作用说明RVBAR在 AArch64 中,重置向量不再是异常向量表的一部分。 有复位向量的专用配置输入引脚和寄存器。在 AArch64 中,处理器从 IMPLEMENTAION‑DEFINED 地址开始执行, 该地址由硬件输入引 脚RVBARADDR定义, 可以通过 R…...
leetcode刷题日记——除自身以外数组的乘积
[ 题目描述 ]: [ 思路 ]: 题目要求获取数组中每个元素除自己以外的各元素的乘积最简单的方法就是算出数组所有元素的乘积,然后除以自身,即可得到除自身外各元素的乘积 但要考虑到其自身为0的情况,即当期自身为0时&am…...
【信奥一本通提高篇】基础算法之贪心算法
原文 https://bbs.fmcraft.top/blog/index.php/archives/22/ 贪心算法 概述 近年来的信息学竞赛试题,经常出现求一个问题的可行解或最优解的题目。这类问题就是我们通常所说的最优化问题。贪心算法是求解这类问题的一种常用算法。在众多的算法中,贪心…...
PyQt6实例_批量下载pdf工具_批量pdf网址获取
目录 前置: 步骤: step one 安装包 step two 获取股票代码 step three 敲代码,实现 step four 网址转pdf网址 视频 前置: 1 本系列将以 “PyQt6实例_批量下载pdf工具”开头,放在 【PyQt6实例】 专栏 2 本节讲…...
KMeans算法案例
KMeans算法案例 案例介绍 已知:客户性别、年龄、年收入、消费指数 需求:对客户进行分析,找到业务突破口,寻找黄金客户 数据集共包含顾客的数据, 数据共有 4 个特征, 数据共有 200 条。接下来,使用聚类算法对具有相似…...
IDApro直接 debug STM32 MCU
使用IDA pro 逆向分析muc 固件的时候, 难免要进行一些动态的debug,来进一步搞清楚一些内存的数据、算法等,这时候使用远程debug 的方式直接在mcu上进行debug 最合适不过了。 不过有个前提条件就是一般来说有的mcu 会被运行中的代码屏蔽 RDP、…...
六十天前端强化训练之第三十六天之E2E测试(Cypress)大师级完整指南
欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、知识讲解 1. E2E测试核心概念 2. Cypress框架特性 3. 工作原理 4. 测试金字塔定位 二、核心代码示例:用户登录全流程测试 三、实现效果展示 四、学习要…...
创建和管理Pod
创建和管理Pod 文章目录 创建和管理Pod[toc]一、什么是Pod1.Pod 的核心定义2.Pod 的组成与结构3.Pod 的生命周期4.Pod 的使用场景5.高级特性 二、Pod与容器1. 为什么使用 Pod 作为 Kubernetes 的最小部署单元?2. 单一容器 Pod3. 多容器 Pod4. 初始化容器(…...
20250330-傅里叶级数专题之离散傅里叶变换(5/6)
5. 傅里叶级数专题之离散傅里叶变换 推荐视频: 工科生以最快的速度理解离散傅立叶变换(DFT) 哔哩哔哩 20250328-傅里叶级数专题之数学基础(0/6)-CSDN博客20250330-傅里叶级数专题之傅里叶级数(1/6)-CSDN博客20250330-傅里叶级数专题之傅里叶变换(2/6)-CSDN博客20250330-傅里叶…...
Android设计模式之代理模式
一、定义: 为其他对象提供一种代理以控制对这个对象的访问。 二、角色组成: Subject抽象主题:声明真是主题与代理的共同接口方法,可以是一个抽象类或接口。 RealSubject真实主题:定义了代理表示的真实对象,…...
《非暴力沟通》第十二章 “重获生活的热情” 总结
《非暴力沟通》第十二章 “重获生活的热情” 的核心总结: 本章将非暴力沟通的核心理念延伸至生命意义的探索,提出通过觉察与满足内心深处的需要,打破“义务性生存”的桎梏,让生活回归由衷的喜悦与创造。作者强调,当行动…...
3.29:数据结构-绪论线性表-上
一、时间复杂度 1、ADT 2、定义法计算时间复杂度:统计核心语句的总执行次数 (1)例题1,与2022年的真题对比着写 此题关键在于求和公式的转化,类型为:线性循环嵌套非线性循环 2022年那道题如果考场上实在脑…...
Java项目如何打jar包?
1.java把项目打包成jar 步骤一、IDEA -> File -> Project Structure -> Artifacts -> -> JAR -> From moduls with dependencies... -> 选择 Module 和 Main Class -> 选择 JAR files from libraries JAR files from libraries 解释 extract to the t…...
【奶茶经济学的符号暴力本质】
金字塔式七层分析框架:奶茶经济学的符号暴力本质 第一层:缺货的戏剧经济学 结论:13.7%缺货率是精密计算的神经钩 机制:喜茶新品首日仅投放86.3%门店,制造"限量焦虑"激活前额叶决策区矛盾验证: …...
Python PDF解析利器:pdfplumber | AI应用开发
Python PDF解析利器:pdfplumber全面指南 1. 简介与安装 1.1 pdfplumber概述 pdfplumber是一个Python库,专门用于从PDF文件中提取文本、表格和其他信息。相比其他PDF处理库,pdfplumber提供了更直观的API和更精确的文本定位能力。 主要特点…...
大模型架构记录13【hr agent】
一 Function calling 函数调用 from dotenv import load_dotenv, find_dotenvload_dotenv(find_dotenv())from openai import OpenAI import jsonclient OpenAI()# Example dummy function hard coded to return the same weather # In production, this could be your back…...
conda 清除 tarballs 减少磁盘占用 、 conda rename 重命名环境、conda create -n qwen --clone 当前环境
🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 conda clean --tarballsconda rename 重命名环境conda create -n qwen --clone …...
Java基础-24-继承-认识继承-权限修饰符-继承的特点
在Java中,继承是面向对象编程(OOP)的一个重要特性。通过继承,一个类可以复用另一个类的属性和方法,从而实现代码的重用性和扩展性。以下是关于继承的一些关键点,包括权限修饰符和继承的特点。 1. 继承的基本…...
Bootstrap 表格:高效布局与动态交互的实践指南
Bootstrap 表格:高效布局与动态交互的实践指南 引言 Bootstrap 是一个流行的前端框架,它为开发者提供了丰富的组件和工具,使得构建响应式、美观且功能丰富的网页变得更加简单。表格是网页中常见的元素,用于展示数据。Bootstrap 提供了强大的表格组件,可以帮助开发者轻松…...
pycharm相对路径引用方法
用于打字不方便,以下直接手写放图,直观理解...
新能源智慧灯杆的智能照明系统如何实现节能?
叁仟新能源智慧灯杆的智能照明系统可通过以下多种方式实现节能: 智能调光控制 光传感器技术:在灯杆上安装光传感器,实时监测周围环境的光照强度。当环境光线充足时,如白天或有其他强光源时,智能照明系统会自动降低路…...
Jenkins教程(自动化部署)
Jenkins教程(自动化部署) 1. Jenkins是什么? Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行&…...
行业智能体大爆发,分布式智能云有解
Manus的一夜爆红,在全球范围内引爆关于AI智能体的讨论。 与过去一般的AI助手不同,智能体(AI Agent)并非只是被动响应,而是主动感知、决策并执行的应用。Gartner预测,到2028年,15%的日常工作决策…...
