0

我正在尝试使用 REDHAWK 2.0.7 在 CENTOS 7 操作系统上启动时自动启动域管理器、设备管理器和波形。

首先我创建了一个python脚本-rwxrwxrwx. 1 root root 1518 /usr/local/sbin/rx.py

python /usr/local/sbin/rx.py我通过调用和检查 REDHAWK IDE验证了脚本在运行时是否按预期工作。它按预期 100% 工作。

接下来我创建了一个 systemd 服务-rwxrwxrwx. 1 root root 188 /etc/systemd/system/rx.service

[Unit]
Description=REDHAWK Service
Requires=omniEvents.service

[Service]
Type=idle
ExecStart=/usr/bin/python /usr/local/sbin/rx.py
User=redhawk

[Install]
WantedBy=multi-user.target

最后,我通过以下步骤启动了此服务:

sudo systemctl daemon-reload
sudo systemctl enable rx.service
sudo systemctl start rx.service

然后我通过检查状态systemctl status rx.service,发现它失败了,原因是:

File "/usr/local/redhawk/core/lib/python/ossie/utils/popen.py", line 59, in Popen
return subprocess.Popen(*args, **kwargs)
File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1327 in _execute_child
raise child_exception
TypeError: execv() arg 2 must contain only strings

我已将有问题的线路隔离到

domain = rh.kickDomain(domain_name="REDHAWK_DEV", kick_device_managers=True, device_managers=['/nodes/NUC1Node/DeviceManager.dcd.xml'])

在以下导入之后

import sys
import os
from time import sleep
sys.path.append(os.path.abspath("/usr/local/redhawk/core/lib64/python"))
sys.path.append(os.path.abspath("/usr/local/redhawk/core/lib/python"))
from ossie.utils import redhawk as rh

我曾尝试封装在 try except 块中以获取更多信息,但上面的错误是我发现的最有用的信息,它似乎仍然没有突出我所缺少的内容。正如我所说,这个脚本在手动运行时运行完美;它只是作为一个 systemd 服务失败了,这让我相信 systemd 进程还需要其他东西才能正确运行它。

有谁知道我可以如何解决在启动时启动 REDHAWK 域管理器的过程,或者有我可以适应和实施的不同工作方法?

4

1 回答 1

0

我重复了您的设置,但使用 systemd 源脚本(runRx.sh)而不是直接运行 python 命令。当我没有获取/etc/profile.d/redhawk-sdrroot.sh文件时,我得到了同样的错误。

工作runRx.sh文件包含:

#!/bin/bash 
source /etc/profile.d/redhawk.sh 
source /etc/profile.d/redhawk-sdrroot.sh 
/usr/bin/python /usr/local/sbin/rx.py 

REDHAWK 2.1.3 包含一个新的 redhawk-adminservice rpm,旨在帮助在 CentOS 6 和 CentOS 7 上自动启动域、节点和波形。请参阅https://redhawksdr.github.io/2.1.3/manual/附录/adminservice/了解更多信息。

于 2018-07-26T14:19:22.863 回答