我使用GMediaRenderer通过覆盆子Pi的UPNP发送音频。偶尔,由于未知原因,我必须通过SSH连接到我的Pi并发送命令sudo service gmediarenderer restart
以使其正常工作。我想向crontab
或类似的用户添加命令,定期检查服务是否正在正确运行。我已经有一个crontab
条目,用于检查服务是否正在运行,如果不是,则启动。我遇到的麻烦是,有时,即使服务正在运行,它似乎也没有与UPNP控制点通信。执行restart
命令会将其恢复,因此我假设服务已崩溃但未关闭。
有没有人知道如何以编程方式检查(最好使用bash脚本)GMediaRenderer服务是否启动并运行?
答案 0 :(得分:0)
我找到了解决方法。命令gssdp-discover
返回活动渲染器列表。我设置sudo crontab
作业每分钟运行一个bash脚本,检查特定渲染器是否正在运行,如果找不到则重新启动gmediarenderer。
以下命令将列出您的活动渲染器:
gssdp-discover -i wlan0 --timeout=3
根据您的特定网络连接更改上面的wlan0
。在我的例子中,我感兴趣的渲染器被列为urn:av-openhome-org:service:Info:1
(运行和不运行渲染器的命令,并查找仅在运行时出现的命令)。所以,我的bash脚本包含以下内容:
gssdp-discover -i wlan0 --timeout=3 --target=urn:av-openhome-org:service:Info:1 | grep available &> /dev/null
if [ $? == 0 ]; then
echo "OpenHome renderer is already running"
else
echo "restarting gmediarenderer"
/etc/init.d/gmediarenderer stop
/etc/init.d/gmediarenderer start
fi