Да, проверил - действительно: если переменная не определена, то в сравнениях у неё значение null. Т.е. вы где-то навыдёргивали кода, не разбираясь, возможно, переделали под себя - в итоге получилась каша, в которой часть бесполезная или не работает.
Для начала отформатируем код с нормальными отступами, чтобы понять, где какая вложенность:
Код: Выделить всё
:global inetdown
:global downa
:global downb
:global downc
:local checka [/ping 0.0.0.0 count=5]
:local time [/sys clock get time]
:if (checkdns = 0) do={
:if ($inetdown != true) do={
/log error "INTERNET is DOWN"
:set $inetdown true
}
} else={
:if ($inetdown = true) do={
/log warning "INTERNET is UP"
:set $inetdown false
}
:if (checka = 0) do={
:if ($downa != true) do={
/log error "VDS 0.0.0.0 is DOWN"
/tool fetch url="https://sms.ru/sms/send?api_id=ВашID&to=ВашНомер&msg=$time+Пропал+Сервер&json=1" keep-result=yes
:set $downa true
}
} else={
:if ($downa = true) do={
/log warning "VDS 0.0.0.0 is UP"
/tool fetch url="https://sms.ru/sms/send?api_id=ВашID&to=ВашНомер&msg=$time+Появился+Сервер&json=1" keep-result=yes
:set $downa false
}
}
}
Поскольку переменная checkdns нигде не определена и никогда не задаётся - условие :if (checkdns = 0) всегда ложное, поэтому всегда выполняется часть else={}. Переменные downb и downc нигде не используются, выкидываем их за ненадобностью. Получаем:
Код: Выделить всё
:global inetdown
:global downa
:local checka [/ping 0.0.0.0 count=5]
:local time [/sys clock get time]
:if ($inetdown = true) do={
/log warning "INTERNET is UP"
:set $inetdown false
}
:if (checka = 0) do={
:if ($downa != true) do={
/log error "VDS 0.0.0.0 is DOWN"
/tool fetch url="https://sms.ru/sms/send?api_id=ВашID&to=ВашНомер&msg=$time+Пропал+Сервер&json=1" keep-result=yes
:set $downa true
}
} else={
:if ($downa = true) do={
/log warning "VDS 0.0.0.0 is UP"
/tool fetch url="https://sms.ru/sms/send?api_id=ВашID&to=ВашНомер&msg=$time+Появился+Сервер&json=1" keep-result=yes
:set $downa false
}
}
inetdown у нас со старта null и её никто не меняет, поэтому :if ($inetdown = true) do={} тоже выкидываем вместе с самой переменной:
Код: Выделить всё
:global downa
:local checka [/ping 0.0.0.0 count=5]
:local time [/sys clock get time]
:if (checka = 0) do={
:if ($downa != true) do={
/log error "VDS 0.0.0.0 is DOWN"
/tool fetch url="https://sms.ru/sms/send?api_id=ВашID&to=ВашНомер&msg=$time+Пропал+Сервер&json=1" keep-result=yes
:set $downa true
}
} else={
:if ($downa = true) do={
/log warning "VDS 0.0.0.0 is UP"
/tool fetch url="https://sms.ru/sms/send?api_id=ВашID&to=ВашНомер&msg=$time+Появился+Сервер&json=1" keep-result=yes
:set $downa false
}
}
Дабы исключить ошибки при начальной настройке, лучше создать переменную с адресом для мониторинга, а не раскидывать адрес по всему скрипту. ID и номер - туда же:
Код: Выделить всё
:local VDS "0.0.0.0"
:local SMSID "ВашID sms.ru"
:local to "ВашНомер"
:global downa
:local checka [/ping $VDS count=5]
:local time [/sys clock get time]
:if (checka = 0) do={
:if ($downa != true) do={
/log error "VDS $VDS is DOWN"
/tool fetch url="https://sms.ru/sms/send?api_id=$SMSID&to=$to&msg=$time+Пропал+Сервер+$VDS&json=1" keep-result=yes
:set $downa true
}
} else={
:if ($downa = true) do={
/log warning "VDS $VDS is UP"
/tool fetch url="https://sms.ru/sms/send?api_id=$SMSID&to=$to&msg=$time+Появился+Сервер+$VDS&json=1" keep-result=yes
:set $downa false
}
}