在CENTOS 7中启动REDHAWK Domain Mgr,Device Mgr和Waveform的启动时

时间:2018-07-12 12:23:16

标签: python-2.7 centos7 systemd redhawksdr omniorb

我正在尝试使用REDHAWK 2.0.7在CENTOS 7 OS上启动时自动启动域管理器,设备管理器和波形。

首先,我创建了一个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块封装为更多信息,但是上面的错误是我发现的最有用的信息,并且似乎仍然无法突出我所缺少的内容。就像我说过的那样,该脚本在手动运行时运行完美;它只是作为systemd服务而失败,这使我相信systemd进程还需要其他一些东西才能正常运行。

有人知道我如何解决启动时启动REDHAWK域管理器的过程,或者有其他我可以适应和实现的工作方法吗?

1 个答案:

答案 0 :(得分: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上的域,节点和波形。