欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > RK3588使用笔记:设置程序/服务开机自启

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

2025/4/2 5:50:43 来源:https://blog.csdn.net/qq_37603131/article/details/146780277  浏览:    关键词: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索引,作为几万分之一的一个小数据,最后总结出来最精华的部分给需要的人,也希望我的文章能够直接帮助到有需要的人。

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词