我正在尝试使用 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 域管理器的过程,或者有我可以适应和实施的不同工作方法?