我目前正在尝试减少启动 beaglebone green 并启动 python 脚本所需的时间。我的简单 python 脚本只是打开海角上的继电器。
我使用继电器转动所需的时间作为启动并执行一些有用操作所需的时间。
以前,中继需要 18 秒,而我通过 systemd 将其减少到 14 秒。
我创建了一个简单的单元文件来启动我的 python 程序
[Unit]
Description=Relaycheck run on startup
DefaultDependencies=no
After=systemd-system.slice
[Service]
WorkingDirectory=/home/
ExecStart=/home/relaycheck2.py
StandardOutput=null
[Install]
Alias=relaycheck2.service
这是当前启动图表的裁剪图片: 引导图
据我了解,我的服务运行得很早,网络等耗时的服务不会影响我的中继服务。它是否正确?
我还能做些什么来减少使用 systemd 启动的时间吗?
答案1
你的程序是否需要维护状态(你需要可写磁盘吗?)你可以做的最简单的事情就是根本不使用 init 系统。相反,请考虑将其附加到您的内核参数中(最有可能在您的 uBoot 环境/配置中):
init=/path/to/your/program
systemd
因此, Linux 内核不会运行(进程管理器),而是将您的程序作为第一个进程运行。现在你说这是一个Python脚本。我不思考您可以作为 init 执行脚本。您可能需要用编译语言编写一个小型包装程序来生成您的 python 应用程序。
请记住,您的 shell/包装程序还需要处理信号(对于没有默认信号处理程序的程序,init/systemd 处理信号)。你也许可以使用类似的东西来逃脱哑初始化通常用于 Docker 容器。
如果您需要一个可写卷,您也可以让您的包装程序为您安装一个分区(它不必是您的根分区。您可能需要安装一个 USB 记忆棒来存储)。
我会首先在桌面虚拟机中尝试这个,因为内核参数在嵌入式系统/uBoot 上可能有点棘手。