HTC Ierakstīts Novembris 7, 2011 Share Ierakstīts Novembris 7, 2011 (labots) Sveiki, vajag nelielu palīdzību, īsti ar bash nedraudzējos līdz ar to esmu nonācis strupceļā, tātad, esošais kods: #!/bin/sh HOSTS="192.168.0.1" DATE=$(date +"%Y-%m-%d") TIME=$(date +"%T") LOGFILE=/tmp/network.log PING=`which ping` log(){ message="$@" echo $message >>$LOGFILE } pingojas() { reachable=1; log "$DATE | $TIME | Connected to internet" while [ $reachable -eq 1 ]; do sleep 2 echo ping $PING $HOSTS > /dev/null 2>&1 if [ "$?" -eq 1 ]; then reachable=2 nepingojas fi done } nepingojas() { reachable=2; log "$DATE | $TIME | Lost internet connection" while [ $reachable -eq 2 ]; do sleep 4 echo neping $PING $HOSTS > /dev/null 2>&1 if [ "$?" -eq 0 ]; then reachable=1 pingojas fi done } if [ -n "$HOSTS" ]; then log "$DATE|$TIME|Network monitoring system started!" $PING $HOSTS > /dev/null 2>&1 if [ "$?" -eq 0 ]; then reachable=1; pingojas else reachable=2; nepingojas fi else log "$DATE|$TIME|IP NOT FOUND!" fi par ping fju , pings tiek laists izmantojot busybox , paša pinga rezultātā atbilde ir tikai: "ip is alive!" pingam nedarbojas -c -t un papildu parametri, strādā tikai "ping hosts" Šajā skriptā tiek palaistas divas dažādas funkcijas kuras pārslēdzas momentos , kad pings pazūd vai parādas, bet ir problēma... pārslēgšanās notiek arī ja pazūd viena paka... nepieciešams uzskaitīt paku skaitu un ja zudušo skaits (pēc kārtas) lielāks par piem. 5 - vecam pārslēgšanos. Precīzāk nepieciešams uzskaitīt rezultātus aiz $PING $HOSTS > /dev/null 2>&1 , šajā gadījumā, ja pingojas, tad "$?" ir 0 , savukārt ja "$?" ir 1 tad notiek pārslēgšanās. Nepieciešams uzskaitīt 0 atbildes konkrētā secībā lai var veikt pareizu pārslēgšanos. Nop, tas nav mans mājas darbs, tas nav arī pasākums par kuru saņemtu skanošo - taisu savam dzelzim mājās, lai zinātu pēc loga kuros momentos zūd internets uz ilgāku laiku (ip lokālā ielikta pagaidām). Izmēģināju daudzus variantus, bet sistēma ir stipri apgraizīta un neatpazīst dažādus loop'us. Sliktākā gadījumā uztaisīšu uz php, bet dotajā momentā domāju, ka nav jēgas taisīt uz php, ja to var izdarīt šeit. Paldies Labots Novembris 7, 2011 - HTC Link to comment Share on other sites More sharing options...
NewAge Novembris 8, 2011 Share Novembris 8, 2011 Īsti nav skaidrs, kas tas par pingu, ko tas atgriež, kad hosts ir sapingots un, ko tas atgriež kad nav sapingots, cik reizes tas pingo hostu utt. Tāpat nav skaidrs, ja tu raksti, ka sistēma neatpazīst ciklus, bet skriptā taču tiek izmantots while cikls. Respektīvi, ja pareizi esmu sapratis sāpi, tad tu vari ciklā 5 reizes palaist pingu un tad skaitīt cik rezies tas atgriež true vai false. PS pinga rezultāts $? var būt ne tikai 0 vai 1, bet arī, piemēram 2: root@zbx:/# ping bad.host.lv; echo $? ping: unknown host bad.host.lv 2 Tas gadījumā, ja tu IP adreses vietā ieraksti hostname Link to comment Share on other sites More sharing options...
HTC Novembris 8, 2011 Author Share Novembris 8, 2011 (labots) mēģināšu atbildēt: a) no konsoles pingojot atgriež tikai divus variantus: ip is alive! vai No response from ip , cits nemaz nav vajadzīgs b) jā, šis cikls strādāja, uz linux kastes taisīju līdzīgu, bet sh failus pārkopējot uz šamo verķīti - neņēma pretī daudzus variantus kamēr nepārtaisīju uz šo variantu, nepareizi nodefinēju frāzi, ka nestrādā 'loopi' c) ip adrese fiksētā līdz ar to citi varianti nav vajadzīgi, hostname netiks vadīts, tikai ip d) hosts tiks pingots visu laiku (infinity loop) - šobrīd tā arī notiek tiklīdz palaižu failu uzreiz tiek nosūtīts pings- ja hosts atbild, tad pārslēdzas uz ping funkciju un pingojas līdz pazūd signāls, tiklīdz pazūd pārslēdzas uz otru funkciju līdz parādās. Sāpe ir tā, ka jāsagrupē rezultāts jo šobrīd pārslēgšanas notiek ja neaiziet viena paka un otrādi , nepieciešams pielikt papildu funkciju, kas uzskaita secībā esošos rezultātus, piem. ja 5 secīgi rezultāti pēc kārtas ir nulles tad neko nedaram, ja visi pieci ir vieninieki tad veicam pārslēgšanos. Zem php tur varētu visu samest array'os, ātri visu saskaitīt un .t.t. , bet te nevaru īsti iedomāties jo, kā jau teicu, no sh īsti daudz neko nezinu :/ Būtu ļoti vienkārši ja varētu norādīt sūtāmo paku skaitu un lielumu, bet to izdarīt nevar / # ping 192.168.0.1;echo $? 192.168.0.1 is alive! 0 Labots Novembris 8, 2011 - HTC Link to comment Share on other sites More sharing options...
NewAge Novembris 8, 2011 Share Novembris 8, 2011 uz tās kastes ir pieejams bash? Ja ir tad, nomaini shebangu uz #!/bin/bash jo sh atbilst visiem posix standartiem, kuros nav definētas daudzas bash built-in funkcijas.. ja gribi, lai būtu pieejamas visas bash funkcijas, tad tas skripts ir jālaiž bash čaulā Link to comment Share on other sites More sharing options...
HTC Novembris 8, 2011 Author Share Novembris 8, 2011 (labots) mda, tā arī domāju, ka nepareizi esmu sapratis atšķirību starp sh un bash ... bash nav pieejams: Currently defined functions: [, [[, addgroup, adduser, ash, basename, busybox, cat, chmod, chown, chroot, clear, cp, cut, date, dd, delgroup, deluser, devfsd, df, dirname, dmesg, du, e2fsck, echo, egrep, eject, expr, false, fdisk, fgrep, find, free, fsck, fsck.ext2, fsck.ext3, ftpget, ftpput, getopt, grep, gzip, halt, head, hexdump, hostname, hwclock, id, ifconfig, init, insmod, ipcrm, ipcs, kill, killall, klogd, linuxrc, ln, logger, login, losetup, ls, lsmod, lzmacat, mkdir, mke2fs, mkfs.ext2, mkfs.ext3, mkfs.extk, mknod, mkswap, mktemp, modprobe, more, mount, mv, netstat, nice, passwd, pidof, ping, pivot_root, poweroff, printf, ps, pwd, rdate, readlink, reboot, rm, rmdir, rmmod, route, sed, sh, sleep, sort, stty, swapoff, swapon, sync, syslogd, tail, tar, tee, test, time, touch, tr, true, tune2fs, udhcpc, udhcpd, umount, uname, unlzma, unzip, uptime, usleep, vi, wc, wget, which, yes Hmm, tad jau topika nosaukumā bash uz posix jānomain ... hmm, googlējot pēc posix sāku atrast jau kautkādus risinājumus, kas pēc sintakses ir līdzīgi, iespējams pats atrisināšu , bet tikai iespējams... Labots Novembris 8, 2011 - HTC Link to comment Share on other sites More sharing options...
NewAge Novembris 8, 2011 Share Novembris 8, 2011 Labāk skaties ko tev saka: cat /etc/shells Link to comment Share on other sites More sharing options...
HTC Novembris 8, 2011 Author Share Novembris 8, 2011 (labots) cat: /etc/shells: No such file or directory ,tāpat caur find neatrod ne failu ne direktoriju Labots Novembris 8, 2011 - HTC Link to comment Share on other sites More sharing options...
NewAge Novembris 8, 2011 Share Novembris 8, 2011 nu tad es tavā vietā mēģinātu iekš tā paša while cikla laist to pingu un tad skaitīt nulles un vieniniekus.. Link to comment Share on other sites More sharing options...
HTC Novembris 8, 2011 Author Share Novembris 8, 2011 (labots) Laikam izdomāju risinājumu, bet nezinu vai pareizs un nezinu kā vēl pareizi uzrakstīt. pašā sākumā nodefinējam mainīgo, piem.: ping_count=5 tad pinga laikā izvedojam loop no 1-5 , ja pinga rezultāts 1=0 un 2=0 un 3=0 un 4=0 un 5=0 , palaižam vēlreiz šo funkciju ja visas vērtības vienāds ar 1 tad pārslēdzamis... Par ilgu rakstīju, uzspēji Labots Novembris 8, 2011 - HTC Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!