-2

我正在尝试在 Intel Galelio Board 上实现 LWM2M 客户端( eclipse/wakaama · GitHub )。我已经实现了一个功能,在我的客户端(伽利略板)中,一旦执行从服务器重新启动,就会重新启动,但是在重新启动时,我的客户端应该自动重新启动,这是一个可执行的二进制文件。我尝试了各种论坛上可用的所有选项,但没有奏效。我给予了适当的许可,更新了 rc.d 并且它在运行级别 3 中也是可见的,但是我的二进制文件没有被执行。有人可以帮我吗?

我已尝试此链接中的所有步骤

4

2 回答 2

1

它必须从远处告诉。让它工作的一些想法:

  1. 你不应该直接链接你的可执行文件;中的文件/etc/init.d应该是使用正确选项调用可执行文件的脚本。

  2. 安装脚本后,尝试从命令行运行它以确保它可以正常工作。

  3. 在运行级别中运行的两个脚本之间选择一个数字。因此,如果您有带有数字1020的脚本,请给出您的脚本15。如果您20在引导期间看到脚本运行,则可以确定您的脚本在此之前已运行。

  4. 将日志记录添加到您的脚本以检查它是否在某些时候失败。一个简单的

     echo "1" >> /tmp/l2m.log
    

    足以看到你的脚本能走多远。

  5. 添加-x到启动脚本的 hashbang 行,使其在执行之前打印每个命令。

  6. 确保您的可执行文件的输出被正确重定向,这样您就可以实际看到任何错误。

于 2015-06-01T08:14:09.053 回答
1

使用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

您可以查看此链接以获取完整的讨论和信息

于 2015-06-15T10:37:24.147 回答