Van nekem egy parancsom/utasításom és az a kérdés, hogy hogyan tudnám esetleg vbs script-ben, vagy parancssorban használni?
Tehát a parancs a következő lenne:
curl\curl -d "SADownStartingFrequency=634000000" [link]
Már ha egyáltalán az, de nem nagyon értek hozzá és nem is találkoztam még ilyennel.
Ez egy EPC3208-as modemet indítana újra távolról (probléma esetén), viszont nem tudom, hogy hogy alakítsam úgy át, hogy esetleg egy vbs script-ben, vagy parancssorban tudnám használni. Valakinek ötlete?
Jaj de hülye vagyok, egyvalamit elfelejtettem megkérdezni.
Ugye a restart akkor indul el, ha a ping sikertelenül végződik, viszont olyan feltételt hogy tudnék megadni, hogy egyrészt újrainduljon ha nincs ping, illetve ha a ping értéke meghaladja mondjuk a 100ms-t akkor is induljon újra. Valójában ha jól gondolom egy "és" művelet lenne, de ezt hogy tudnám leírni úgy, hogy működjön? Ez lenne az utolsó kérdésem.
Nem "és" hanem "vagy" kell: akkor induljon újra, ha nem sikerült a pingelés VAGY a ping idő nagyobb 100ms-nál.
De batch-ben nem ilyen egyszerű. Szinte minden parancs futás után felülírja az %errorlevel% környezeti változót, ami megmondja hogy a ping sikerült e vagy sem. Tehát először meg kell nézni hogy sikerült e, és csak utána lehet megnézni hogy mennyi a ping ami más parancsok futtatásával jár. Ehhez viszont el kell menteni először a ping kimenetét és később feldolgozni azt. Kicsit átírtam a scriptet:
:begin
timeout /t 900
ping -n 20 www.google.com > "%TEMP%\ping.tmp"
if errorlevel 1 goto reboot
for /f "tokens=13 delims=m " %%a in ('find "Average =" "%TEMP%\ping.tmp"') do set Average=%%a
del "%TEMP%\ping.tmp"
if %Average% LSS 200 goto begin
:reboot
curl.exe -d "SADownStartingFrequency=634000000" [link]
timeout /t 300
goto begin
Módosítsd benne amit kell. Itt ha az átlagos ping-idő több mint 200ms, akkor újra indítja a modemet. Magasabbra állítottam, mert előfordul néha hogy egy-egy csomag elkószál, elkeveredik az internet útvesztőjében, vagy történik vele valami amiért késni fog, ami megnövekedett átlagidővel jár. Ezért nem érdemes újraindítani a modemet. Ezen kívül a ping az alap 4 pingelés helyett 20 pingelésből számol átlagot most már.
Beraktam még az újraindítás után is egy rövidebb timeoutot, és lejjebb vettem az eredetit is.
A program a TEMP mappádba ír és töröl, elvileg oda biztos van joga, de ha nem megy akkor szólj.
Nos sikerült kicsit módosítani, viszont nem működik úgy, ahogy kellene.
A módosítás a következő:
:begin
timeout /t 120
ping -n 10 bix.hu > "%TEMP%\ping.tmp"
if errorlevel 1 goto reboot
for /f "tokens=13 delims=m " %%a in ('find "Average =" "%TEMP%\ping.tmp"') do set Average=%%a
del "%TEMP%\ping.tmp"
if %Average% LSS 10 goto begin
:reboot
"curl.exe" " [link] -d "SADownStartingFrequency=1" > NUL
timeout /t 40
goto begin
Már eleve nem akart úgy működni, ahogy kell, viszont próbából lejjebb is vettem az értékeket és semmi.
Mikor elindítom, akkor ugye visszaszámol, utána viszont elkezd pingelni, illetve mégsem. Kiírja a pingelést, de nem mutatja, bár gondolom ilyenkor a temp-be ír csak. A lényeg, hogy ezután abszolút semmi, végigfut pár sor és bezárul, aminek ugye nem lenne szabad megtörténnie. Meg ugye a másik, hogy a modemet nem indítja újra, legalább is alap esetben, mert ha nem tudja megpingelni az adott állomást, akkor újraindul, viszont utána megint bezárul, viszont ha megpingeli az állomást, utána a ping lehet akármekkora, gyakorlatilag figyelembe se veszi, mert végigfut és bezárul, a modemet pedig nem indítja újra.
Tehát valahogy "félig" jó, ha szabad így fogalmaznom. A hibát sajnos nem látom meg, mivel annyira nem értek hozzá.
Kipróbáltam, és itt nálam jól működik. Írd le kérlek hogy mit ír ki pontosan, csak úgy tudjuk megállapítani hogy hol és miért zárul be a program.
A ping azért nem látszik mert a fájlba ír és nem a konzolra.
Gyanítom az lesz a probléma hogy nekem angol neked magyar Windowsod van és erre nem gondoltam :) Amikor lefuttatom a ping parancsot, a parancs végén így írja ki az adatokat:
Minimum = 15ms, Maximum = 18ms, Average = 16ms
Én az Average szóra keresek és a kis 'm'-eket meg a szóközöket számolom (hanyadik szóköz és kis 'm' között van a szám amire szükség van), ez nyilván más a magyarban :)
Wikipédiárol szedtem hogy így néz ki a magyarban szólj ha nem:
minimum = 44ms, maximum = 46ms, átlag = 44ms
Bár tesztelni nem tudom de ha jól számolom akkor a tokeneken véletlenül nem kell állítani, csak annyit hogy ne az Average szóra keressen rá mert azt nem fogja megtalálni. Viszont a maximum és minimum szavakat igen ha nem teszünk kis- és nagy betűk között különbséget.
Találsz egy ilyet a scriptben:
('find "Average =" "%TEMP%\ping.tmp"')
Írd át erre:
('find /i "minimum =" "%TEMP%\ping.tmp"')
Így szerintem angol és magyar rendszeren is működik, próba szerencse.
Na, én nem is gyanítottam volna ilyen kis okot, elvégre ha a tudásom nem csal, akkor a magyar Windows is ugyan úgy angol, csak egy magyar "skin" (fedés) van rajta, bár gondolom azt írta bele a fájlba, amit megjelenített(pontosabban meg kellene jelenítenie) a konzolon és az ugye magyar, bár lehet téves a logikám.
Mindegy, köszönöm szépen, tökéletesen működik! Csak egy furcsaságot vettem észre, hogy ha a ping és annak az értéke is megfelelő, akkor a 40-es timeot-ot nem számolja(lehet ezért ki is veszem belőle), csak újraindítás után, bár lehet pont arra vonatkozik, de mint mondtam, annyira nem értek hozzá, bár tény hogy kicsit "okosodtam" :)
Még egyszer köszönöm szépen a segítséget!
Örülök hogy működik. A 40-es timeout azért van benne hogy megvárja amíg a modem újraindul, addig ne csináljon semmit. Ha elég hosszú a másik timeout, akkor nem feltétlenül kell bele, de nem baj ha ott van.
Engem is meglepett, hogy még a ping parancs is magyar :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!