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

news2025/4/2 2:45:28

一、前言

一般将系统用作嵌入式设备时肯定要布置某些程序,这时候就需要对程序设置开机自己,否则每次都要人为启动,当有些嵌入式系统未连接显示屏或者无桌面环境去操作启动程序时,程序自启就是必须的了,本文介绍在纯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[@]}"; do
    SERVICE_FILE="/etc/systemd/system/${service}.service"
    echo "正在设置服务: $service"

    # 检查服务文件是否存在
    if [ ! -f "$SERVICE_FILE" ]; then
        echo "❌ 错误:服务文件 $SERVICE_FILE 不存在,请检查!"
        continue  # 跳过当前服务
    fi

    # 重新加载 systemd(避免修改后未生效)
    sudo systemctl daemon-reload

    # 启用开机自启
    sudo systemctl enable "$service"
    if [ $? -eq 0 ]; then
        echo "✅ $service 开机自启设置成功"
    else
        echo "❌ $service 开机自启设置失败,请检查服务文件配置"
        continue
    fi

    # 立即启动服务
    sudo systemctl start "$service"
    if [ $? -eq 0 ]; then
        echo "✅ $service 启动成功"
    else
        echo "❌ $service 启动失败,请查看日志: journalctl -u $service -xe"
    fi

    echo "----------------------------------------"
done

echo "所有服务设置完成!"

四、结语

随着时代的发展,在工作中用到了越来越多的AI,帮助工作提升了很大的效率,但我认为AI只能作为人类的工具,逐步取代其他落后的工具,AI的出现让很多技术实现起来并不需要最专业的人士,对以往的高端顶尖人才肯定是有打击,适合大部分对专业了解一些的人和几年工龄的工程师,使用AI的前提就是知道如何问问题,让AI给出你的答案,整体来说,AI肯定会推进人类进步,这也是人类几十年的积累,厚积薄发。我的文章可能会被AI索引,作为几万分之一的一个小数据,最后总结出来最精华的部分给需要的人,也希望我的文章能够直接帮助到有需要的人。

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

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

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

相关文章

python实现股票数据可视化

最近在做一个涉及到股票数据清洗及预测的项目&#xff0c;项目中需要用到可视化股票数据这一功能&#xff0c;这里我与大家分享一下股票数据可视化的一些基本方法。 股票数据获取 目前&#xff0c;我已知的使用python来获取股票数据方式有以下三种: 爬虫获取&#xff0c;实现…

JavaScript DOM与元素操作

目录 DOM 树、DOM 对象、元素操作 一、DOM 树与 DOM 对象 二、获取 DOM 元素 1. 基础方法 2. 现代方法&#xff08;ES6&#xff09; 三、修改元素内容 四、修改元素常见属性 1. 标准属性 2. 通用方法 五、通过 style 修改样式 六、通过类名修改样式 1. className 属…

ARM向量表

向量表作用说明RVBAR在 AArch64 中&#xff0c;重置向量不再是异常向量表的一部分。 有复位向量的专用配置输入引脚和寄存器。在 AArch64 中&#xff0c;处理器从 IMPLEMENTAION‑DEFINED 地址开始执行&#xff0c; 该地址由硬件输入引 脚RVBARADDR定义&#xff0c; 可以通过 R…

leetcode刷题日记——除自身以外数组的乘积

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 题目要求获取数组中每个元素除自己以外的各元素的乘积最简单的方法就是算出数组所有元素的乘积&#xff0c;然后除以自身&#xff0c;即可得到除自身外各元素的乘积 但要考虑到其自身为0的情况&#xff0c;即当期自身为0时&am…

【信奥一本通提高篇】基础算法之贪心算法

原文 https://bbs.fmcraft.top/blog/index.php/archives/22/ 贪心算法 概述 近年来的信息学竞赛试题&#xff0c;经常出现求一个问题的可行解或最优解的题目。这类问题就是我们通常所说的最优化问题。贪心算法是求解这类问题的一种常用算法。在众多的算法中&#xff0c;贪心…

PyQt6实例_批量下载pdf工具_批量pdf网址获取

目录 前置&#xff1a; 步骤&#xff1a; step one 安装包 step two 获取股票代码 step three 敲代码&#xff0c;实现 step four 网址转pdf网址 视频 前置&#xff1a; 1 本系列将以 “PyQt6实例_批量下载pdf工具”开头&#xff0c;放在 【PyQt6实例】 专栏 2 本节讲…

KMeans算法案例

KMeans算法案例 案例介绍 已知&#xff1a;客户性别、年龄、年收入、消费指数 需求&#xff1a;对客户进行分析&#xff0c;找到业务突破口&#xff0c;寻找黄金客户 数据集共包含顾客的数据, 数据共有 4 个特征, 数据共有 200 条。接下来&#xff0c;使用聚类算法对具有相似…

IDApro直接 debug STM32 MCU

使用IDA pro 逆向分析muc 固件的时候&#xff0c; 难免要进行一些动态的debug&#xff0c;来进一步搞清楚一些内存的数据、算法等&#xff0c;这时候使用远程debug 的方式直接在mcu上进行debug 最合适不过了。 不过有个前提条件就是一般来说有的mcu 会被运行中的代码屏蔽 RDP、…

六十天前端强化训练之第三十六天之E2E测试(Cypress)大师级完整指南

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、知识讲解 1. E2E测试核心概念 2. Cypress框架特性 3. 工作原理 4. 测试金字塔定位 二、核心代码示例&#xff1a;用户登录全流程测试 三、实现效果展示 四、学习要…

20250330-傅里叶级数专题之离散傅里叶变换(5/6)

5. 傅里叶级数专题之离散傅里叶变换 推荐视频: 工科生以最快的速度理解离散傅立叶变换(DFT) 哔哩哔哩 20250328-傅里叶级数专题之数学基础(0/6)-CSDN博客20250330-傅里叶级数专题之傅里叶级数(1/6)-CSDN博客20250330-傅里叶级数专题之傅里叶变换(2/6)-CSDN博客20250330-傅里叶…

3.29:数据结构-绪论线性表-上

一、时间复杂度 1、ADT 2、定义法计算时间复杂度&#xff1a;统计核心语句的总执行次数 &#xff08;1&#xff09;例题1&#xff0c;与2022年的真题对比着写 此题关键在于求和公式的转化&#xff0c;类型为&#xff1a;线性循环嵌套非线性循环 2022年那道题如果考场上实在脑…

大模型架构记录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 当前环境

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 conda clean --tarballsconda rename 重命名环境conda create -n qwen --clone …

pycharm相对路径引用方法

用于打字不方便&#xff0c;以下直接手写放图&#xff0c;直观理解

新能源智慧灯杆的智能照明系统如何实现节能?

叁仟新能源智慧灯杆的智能照明系统可通过以下多种方式实现节能&#xff1a; 智能调光控制 光传感器技术&#xff1a;在灯杆上安装光传感器&#xff0c;实时监测周围环境的光照强度。当环境光线充足时&#xff0c;如白天或有其他强光源时&#xff0c;智能照明系统会自动降低路…

Jenkins教程(自动化部署)

Jenkins教程(自动化部署) 1. Jenkins是什么&#xff1f; Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具&#xff0c;广泛用于项目开发&#xff0c;具有自动化构建、测试和部署等功能。Jenkins用Java语言编写&#xff0c;可在Tomcat等流行的servlet容器中运行&…

行业智能体大爆发,分布式智能云有解

Manus的一夜爆红&#xff0c;在全球范围内引爆关于AI智能体的讨论。 与过去一般的AI助手不同&#xff0c;智能体&#xff08;AI Agent&#xff09;并非只是被动响应&#xff0c;而是主动感知、决策并执行的应用。Gartner预测&#xff0c;到2028年&#xff0c;15%的日常工作决策…

日语Learn,英语再认识(5)

This is a dedicated function — it exists solely to solve this case. This is a dedicated function. It’s a dedicated method for solving this case. 其他备选词&#xff08;但没dedicated精准&#xff09;&#xff1a; special → 含糊&#xff0c;有时只是“特别”…

【区块链安全 | 第十四篇】类型之值类型(一)

文章目录 值类型布尔值整数运算符取模运算指数运算 定点数地址&#xff08;Address&#xff09;类型转换地址的成员balance 和 transfersendcall&#xff0c;delegatecall 和 staticcallcode 和 codehash 合约类型&#xff08;Contract Types&#xff09;固定大小字节数组&…

音视频入门基础:MPEG2-TS专题(25)——通过FFmpeg命令使用UDP发送TS流

一、通过FFmpeg命令使用UDP发送TS流 通过以下FFmpeg命令可以将一个mp4文件转换为ts封装&#xff0c;并基于UDP发送&#xff08;推流&#xff09;&#xff1a; ffmpeg.exe -re -i input.mp4 -vcodec copy -acodec copy -f mpegts udp://127.0.0.1:1234 其中&#xff1a; “in…