Добрый день.
Я бы предпочел разобраться что происходит, лучше.
Не очень хорошо - зачем перезапускать сервис если достаточно соединение?
Например у меня оператор выдает при соединении с ограничением адрес из другой подсети. Я его проверяю - и переподнимаю соединение.
log.info("strt")
//Определим переменные.
var interfaceControlName = "network/GPRS IP" //топик с адресом соединения
var checkPeriod = 5000 //период проверки, мс
var connectionName = "wb-gsm-sim1" //имя соединения
var partIP = "100.211" //старшая часть адреса, текст
//Опишем, пожалуй, функцию проверки отдельно
function interfaceControl(cName, ipPart){ //если не подключено или подключено с верным адресов - возвращается true; иначе - false
var currentAddressString = dev[cName];
log.debug("При проверке текущего адреса получен", currentAddressString)
if (currentAddressString == null) {
log.debug("адреса нет");
return true;
} else { //Тут проверим адрес (Который не null) на соответствие заданному
if ((currentAddressString.indexOf("ipPart",0)) == 0){
log.debug("адреса верный");
return true;
}
}
log.debug("адрес неверный");
return false;
}
//функция разрывающая соединения
function nmcliReconnect(conName){ //аргумент - имя соединения NM
runShellCommand("nmcli connection down "+ conName+"; sleep 6; nmcli connection up "+conName, {
captureOutput: true,
exitCallback: function(exitCode, capturedOutput) {
if (exitCode === 0) {
return true
}
}
});
}
//log.info("проверяем", interfaceControl(interfaceControlName, partIP))
//тут опишем правило, которое будет срабатывать при изменении самого адреса. И вызывать функцию.
var checkRule = defineRule("change_IP", {
whenChanged: interfaceControlName, // топик, при изменении которого сработает правило
then: function (newValue, devName, cellName) {
log.info("devName:{}, cellName:{}, newValue:{}", devName, cellName, newValue); // вывод сообщения в лог
log.debug("devName:{}, cellName:{}, newValue:{}", devName, cellName, newValue); // вывод сообщения в лог
if (!interfaceControl(interfaceControlName, partIP)){
log.debug("при смене адреса новый:{} не прошел проверку", newValue); // вывод сообщения в лог
nmcliReconnect(connectionName)
log.info("соединение:{} перезапущено. Адрес {} некорректен", connectionName, newValue);
} else {
log.info("при смене адреса новый:{} пуст или прошел проверку", newValue);
}
}
});
runRule(checkRule)
То есть в зависимости от цели механизм проверки и реакции может быть разным. Ну и реализуется по-разному.