我正在尝试在 Intel Galelio Board 上实现 LWM2M 客户端( eclipse/wakaama · GitHub )。我已经实现了一个功能,在我的客户端(伽利略板)中,一旦执行从服务器重新启动,就会重新启动,但是在重新启动时,我的客户端应该自动重新启动,这是一个可执行的二进制文件。我尝试了各种论坛上可用的所有选项,但没有奏效。我给予了适当的许可,更新了 rc.d 并且它在运行级别 3 中也是可见的,但是我的二进制文件没有被执行。有人可以帮我吗?
我已尝试此链接中的所有步骤
我正在尝试在 Intel Galelio Board 上实现 LWM2M 客户端( eclipse/wakaama · GitHub )。我已经实现了一个功能,在我的客户端(伽利略板)中,一旦执行从服务器重新启动,就会重新启动,但是在重新启动时,我的客户端应该自动重新启动,这是一个可执行的二进制文件。我尝试了各种论坛上可用的所有选项,但没有奏效。我给予了适当的许可,更新了 rc.d 并且它在运行级别 3 中也是可见的,但是我的二进制文件没有被执行。有人可以帮我吗?
我已尝试此链接中的所有步骤
它必须从远处告诉。让它工作的一些想法:
你不应该直接链接你的可执行文件;中的文件/etc/init.d
应该是使用正确选项调用可执行文件的脚本。
安装脚本后,尝试从命令行运行它以确保它可以正常工作。
在运行级别中运行的两个脚本之间选择一个数字。因此,如果您有带有数字10
和20
的脚本,请给出您的脚本15
。如果您20
在引导期间看到脚本运行,则可以确定您的脚本在此之前已运行。
将日志记录添加到您的脚本以检查它是否在某些时候失败。一个简单的
echo "1" >> /tmp/l2m.log
足以看到你的脚本能走多远。
添加-x
到启动脚本的 hashbang 行,使其在执行之前打印每个命令。
确保您的可执行文件的输出被正确重定向,这样您就可以实际看到任何错误。
使用Systemd.Service我可以解决这个问题。
基本上,您制作“服务”(指定要运行的程序的文本文件)并将它们放在“/lib/systemd/system/”文件夹中
然后你运行'systemctl enable myservice'在启动时启用服务,如果进程死亡,有各种参数可以重新启动服务,或者在网络接口启动之前或之后启动服务。
向 /lib/systemd/system 添加一个新的服务脚本 - 看看那里的脚本,一个很好的例子是 iotkit-agent.service 脚本。这样你就有了 yourscript.service 文件。要启动,首先刷新 systemd,然后尝试启动你的新服务 systemctl daemon-reload systemcrl start yourscript.service
然后,您可以使用“systemctl status yourscript.service”查看它是否已启动并处于活动状态。
如果您希望它在启动时启动,则必须“启用”它 systemcrl enable yourscript.service
它会从 /etc/systemd/system/... 中的相关目录创建指向脚本的软链接...好了。
如果您的脚本调用需要设置环境变量的二进制文件,请确保将它们包含在脚本中,LD_LIBRARY_PATH 是所需的常见变量: LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib export LD_LIBRARY_PATH
您可以查看此链接以获取完整的讨论和信息