我正在尝试使用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域管理器的过程,或者有其他我可以适应和实现的工作方法吗?
答案 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上的域,节点和波形。