在bash中获取正在运行的进程的输出

时间:2016-08-03 10:13:54

标签: bash cron server output

所以我有以下脚本:

#!/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

我希望能够以某种方式捕获输出检查,如果它包含文本WARNINGConnection refused等,并根据该文本是否存在而killall synergyc进行检查假设cron正常。

最终目标我希望synergyc连接到第一个可用的ip,但如果ip变得不可用并且继续寻找下一个可用的ip,也会自行终止}。

这个脚本的目的是我们有一个在家运行的媒体中心,我们使用两台笔记本电脑作为遥控器唯一的事情是synergy只能有一个服务器有多个客户端而不是反过来因此需要这个脚本,只是尝试传达这不是一个xy问题。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用synergyc选项运行--no-restart。手册页说:

  

- 如果由于某种原因失败,请勿尝试重新启动客户端

然后,如果客户端死循环将继续下一个ip。