RK3588使用笔记:设置程序/服务开机自启

news/2025/4/2 7:18:09/

一、前言

一般将系统用作嵌入式设备时肯定要布置某些程序,这时候就需要对程序设置开机自己,否则每次都要人为启动,当有些嵌入式系统未连接显示屏或者无桌面环境去操作启动程序时,程序自启就是必须的了,本文介绍在纯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索引,作为几万分之一的一个小数据,最后总结出来最精华的部分给需要的人,也希望我的文章能够直接帮助到有需要的人。

继续努力前进吧骚年,在不努力普通工程师很可能被普通外行人随便替代了


http://www.ppmy.cn/news/1584580.html

相关文章

简易版“异步多线程服务器”

1.引用 和复制(不用&做参数) 的区别 (1)第一个:肯定是一个原参数操作,另外一个是对原参数 复制一个副本 去操作&#xff08;开销问题&#xff09; (2)第二个:如果是公共参数,比如io_context,他始终只有一个(与内核相关),只能由& 简介 本文基于c,重点是来掌握c的异步概…

python 语法篇(一)

目录 1 正则匹配注意点11.1 正则匹配字符串写法1.2 创建re函数&#xff08;1&#xff09;re.search()--搜索第一个匹配项&#xff08;2&#xff09;re.match() - 从字符串开头匹配&#xff08;3&#xff09;re.findall() - 返回所有匹配项的列表&#xff08;4&#xff09;re.fi…

JAVA实现动态IP黑名单过滤

一些恶意用户(可能是黑客、爬虫、DDoS 攻击者)可能频繁请求服务器资源&#xff0c;导致资源占用过高。因此需要一定的手段实时阻止可疑或恶意的用户&#xff0c;减少攻击风险。 通过 IP 封禁&#xff0c;可以有效拉黑攻击者&#xff0c;防止资源被滥用&#xff0c;保障合法用户…

实战 | 基于 SpringBoot + UniApp 打造国际版打车系统:架构设计与性能优化全解析

✅ 一、引言&#xff1a;国际版打车系统的技术挑战 随着共享出行在全球范围内的快速发展&#xff0c;跨国打车平台如 Uber、Lyft 和 DiDi 等纷纷崛起。开发一套国际版打车系统&#xff0c;不仅要满足国内需求&#xff0c;还需要应对以下技术挑战&#xff1a; &#x1f30d; 多…

Altium Designer 24 PCB编辑器[设计]栏找不到[规则]选项而只有[Constraints Manager]选项

Altium Designer 24 PCB编辑器[设计]栏找不到[规则]选项而只有[Constraints Manager]选项 问题描述问题原因解决方法 问题描述 在使用 Altium Designer 24 的PCB编辑器时&#xff0c;发现有的PCB文件的【设计】栏下有【规则】这个选项&#xff0c;有的PCB文件的【设计】栏下没…

蓝桥杯 之 LCA算法

文章目录 习题1483.树节点的第K个祖先拓展&#xff1a;LCA LCA问题&#xff0c;就是最近公共祖先的问题 习题 1483.树节点的第K个祖先 1483.树节点的第K个祖先 普通的做法&#xff0c;当然是一个个往上面搜索&#xff0c;但是这样的话时间复杂度是o(k),那么能不能每次求解的是…

JVM如何判断一个对象可以被回收

在 Java 中&#xff0c;JVM 使用 垃圾回收器 (GC) 来自动管理内存。JVM 判断一个对象是否可以被回收的主要依据是 对象是否可达。具体来说&#xff0c;如果某个对象不再被任何可达的引用所引用&#xff0c;那么这个对象就可以被认为是 垃圾&#xff0c;可以被回收。 判断一个对…

win 远程 ubuntu 服务器 安装图形界面

远程结果&#xff1a;无法使用docker环境使用此方法 注意要写IP和:数字 在 ubuntu 服务器上安装如下&#xff1a; # 安装 sudo apt-get install tightvncserver # 卸载 sudo apt purge tightvncserver sudo apt autoremove#安装缺失的字体包&#xff1a; sudo apt update s…