Я использую скрипт PHP "shell", похожий на этот, запускаемый из терминала, чтобы проверить, не работает ли одно или несколько устройств. Я использую его для мониторинга, если мост Wifi вышел из строя (если он не видит MAC-адрес устройств на другой стороне моста, то предположим, что он отключился):
#!/usr/bin/php <?php $MULTICAST_ADDR='192.168.99.255'; $DEVICES_TO_TEST_FOR_BRIDGE=array( // list of MACs 'XX:XX:63:f2:XX:XX', 'XX:XX:d0:ad:XX:XX', 'XX:XX:b9:eb:XX:XX' ); $SLEEP=10000000; // one sec = 1000000, sleep before reconnect while(TRUE) { usleep($SLEEP); flush(); `ping -b -c 3 -t 3 $MULTICAST_ADDR 2> /dev/null`; flush(); $res=`arp -an`; $bridgeIsOn=FALSE; echo("DEVICES:\n"); echo($res); echo("\n"); foreach($DEVICES_TO_TEST_FOR_BRIDGE as $deviceToTestForBridge) { if (strpos($res, $deviceToTestForBridge) !== false) { $bridgeIsOn=TRUE; $lastBridgeOn=time(); } } if(!$bridgeIsOn && (time()-$lastBridgeOn>5*60) ) { // If bridge is down for 5 minutes echo(" BRIDGE HAS BEEN OFF FOR LONG (".(time()-$lastBridgeOn)."s) - REQUESTING A RESTART\n"); // Do something here } }
Что он делает, как в терминале, набрав
ping -b -c 3 -t 3 192.168.99.255 2> /dev/null
Мои устройства находятся в диапазоне 192.168.99.xxx, .255 означает «их всех». Так что пингуйте их всех и игнорируйте ответы.
А затем чтение таблиц ARP с помощью команды
arp -an
Остальная часть кода заключается в сравнении списка с устройствами, которые я хочу. В конце цикла $ bridgeIsOn имеет значение ИСТИНА или ЛОЖЬ, а у $ lastBridgeOn есть время, когда он последний раз был замечен, поэтому я могу выбирать и выполнять какие-то вещи. В вашем случае вы должны изменить логику, $ bridgeIsOn означает, что ваш телефон находится в сети:if($bridgeIsOn) { /* do something */}
Я сохраняю скрипт как «monitorbridge», делаю его исполняемым и запускаю в терминале
./monitorbridge
Скрипт остается включенным, пока я не закрою терминал или не наберу ^ C. Конечно, вы можете запустить его при входе в систему или при загрузке.