所以我有以下脚本:
#!/bin/bash
# IP address to cycle through (in order of priority)
ip=( "192.168.20.102" "192.168.20.103" )
# Check if synergy is already connected
if pgrep "synergyc"; then
# Synergy already connected
echo "Synergy is already running."
else
for i in "${ip[@]}"
do
# Ping ip and connect if successful
ping -c 1 -t 1 "$i" && /usr/bin/synergyc -n media -f "$i"
echo "Synergy connected to ${i}";
done
fi
完成工作后,它以cron
运行,一旦ip
可用,它就会连接。如果两者都可用,它将根据数组的顺序进行连接。
问题是,如果它连接到ip
并且ip
变得不可用,则该进程会挂起以下输出。
[2016-08-03T22:04:53] NOTE: connecting to '192.168.20.102': 192.168.20.102:24800
[2016-08-03T22:04:53] WARNING: failed to connect to server: Connection refused
[2016-08-03T22:04:54] NOTE: connecting to '192.168.20.102': 192.168.20.102:24800
[2016-08-03T22:04:54] WARNING: failed to connect to server: Connection refused
我希望能够以某种方式捕获输出检查,如果它包含文本WARNING
或Connection refused
等,并根据该文本是否存在而killall synergyc
进行检查假设cron正常。
最终目标我希望synergyc
连接到第一个可用的ip
,但如果ip
变得不可用并且继续寻找下一个可用的ip
,也会自行终止}。
这个脚本的目的是我们有一个在家运行的媒体中心,我们使用两台笔记本电脑作为遥控器唯一的事情是synergy只能有一个服务器有多个客户端而不是反过来因此需要这个脚本,只是尝试传达这不是一个xy问题。
答案 0 :(得分:0)
您可以尝试使用synergyc
选项运行--no-restart
。手册页说:
- 如果由于某种原因失败,请勿尝试重新启动客户端
然后,如果客户端死循环将继续下一个ip。