31
|
BSD секция / Системни настройки / Re: Рестарт на FreeBSD 7.0 с грешка "Fatal trap 12: page fault while in kernel mode"
|
-: Mar 17, 2015, 08:41
|
netstat -m
sysctl kern.ipc.nmbclusters
7 е EOL преди 6 години, защо не ъпгрейднеш до 9.1?
не разбирам особено руски но виж и http://www.opennet.ru/base/sys/freebsd_panic_solution.txt.html
все пак ъпгрейд...
GeSHi (Bash): #netstat -m 36/1884/1920 mbufs in use (current/cache/total) 13/1567/1580/25600 mbuf clusters in use (current/cache/total/max) 0/512 mbuf+clusters out of packet secondary zone in use (current/cache) 0/119/119/12800 4k (page size) jumbo clusters in use (current/cache/total/max) 0/0/0/6400 9k jumbo clusters in use (current/cache/total/max) 0/0/0/3200 16k jumbo clusters in use (current/cache/total/max) 35K/4081K/4116K bytes allocated to network (current/cache/total) 0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters) 0/0/0 requests for jumbo clusters denied (4k/9k/16k) 0/73/6656 sfbufs in use (current/peak/max) 0 requests for sfbufs denied 0 requests for sfbufs delayed 7 requests for I/O initiated by sendfile 0 calls to protocol drain routines # sysctl kern.ipc.nmbclusters kern.ipc.nmbclusters: 25600
За ъпгрейд и аз се замислям, но има някой неща които ме притеснява да не се счупят. EDIT:Тъй като 35K/4081K/4116K bytes allocated to network (current/cache/total) ми грабна окото и почнах пак да ровя, попаднах на няколко интересни неща. Едното е (FIXED) Network mbuf Leak / Exhaustion in FreeBSD 9.0 / 9.1 Хардуеъра пак е DELL и пак става дума за VMWare. Питането ми е, как точно да приложа този пач, за да не омажа нещо и изобщо подходящ ли е за мен, след като там се прилага на 9.0 , а аз съм с 7.0 Другото интересно е изхода от командата: GeSHi (Bash): netstat -i -w 1 input (Total) output packets errs bytes packets errs bytes colls 2167 0 1379324 2385 0 2006399 0 1759 0 1219967 1975 0 1820319 0 1762 0 1173325 1975 0 1771865 0 3973 0 2048293 4367 0 3164761 0 4797 0 1846254 5030 0 2543221 0 3504 0 1458508 3705 0 2054196 0 2115 0 1554739 2216 0 1894367 0 2212 1 1484002 2533 0 2392537 0 9573 5 7839601 12353 0 14573350 0 9594 5 8082062 12598 0 15286981 0 9560 6 8077210 12497 0 15133796 0 9904 7 8153599 12835 0 15304480 0 11425 7 9625388 14974 0 18238077 0 11353 9 9481029 14816 0 17864126 0 12814 4 10335644 16579 0 19374355 0 9452 7 7778154 12246 0 14551521 0 11317 8 9533213 14887 0 18043389 0 7649 3 6345857 9931 0 11812625 0 9019 2 6945061 11518 0 12721038 0 6832 1 4976888 8380 0 8712343 0 12726 12 10850582 15599 0 17323673 0
Тези грешки на входа трябва ли да ме притесняват?
|
|
|
32
|
BSD секция / Системни настройки / Рестарт на FreeBSD 7.0 с грешка "Fatal trap 12: page fault while in kernel mode"
|
-: Mar 15, 2015, 19:12
|
Здравейте, От няколко месеца, профилактично, въпросното FreeBSD се рестартира, без видима причина, напълно рандом. Пуснато е на VMWare център. Ето какво има в лога (vmcore): GeSHi (Bash): Fatal trap 12: page fault while in kernel mode cpuid = 1; apic id = 01 fault virtual address = 0x18 fault code = supervisor write, page not present instruction pointer = 0x20:0xc0839301 stack pointer = 0x28:0xe6992be8 frame pointer = 0x28:0xe6992c58 code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, def32 1, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 32 (dummynet) trap number = 12 panic: page fault cpuid = 1 Uptime: 22d0h37m29s Physical memory: 3059 MB Dumping 260 MB: 245 229 213 197 181 165 149 133 117 101 85 69 53 37 21 5 #0 doadump () at pcpu.h:195 195 __asm __volatile("movl %%fs:0,%0" : "=r" (td));
Следвам това ръководство и стигнах до: GeSHi (Bash): (kgdb) list *0xc0839301 0xc0839301 is in ready_event_wfq (../../../netinet/ip_dummynet.c:700). 695 if (p->if_name[0]==0 && p->numbytes < 0) { /* this implies bandwidth >0 */ 696 dn_key t=0 ; /* number of ticks i have to wait */ 697 698 if (p->bandwidth > 0) 699 t = ( p->bandwidth -1 - p->numbytes) / p->bandwidth ; 700 dn_tag_get(p->tail)->output_time += t ; 701 p->sched_time = curr_time ; 702 heap_insert(&wfq_ready_heap, curr_time + t, (void *)p); 703 /* XXX should check errors on heap_insert, and drain the whole 704 * queue on error hoping next time we are luckier. (kgdb) backtrace #0 doadump () at pcpu.h:195 #1 0xc0755537 in boot (howto=260) at ../../../kern/kern_shutdown.c:409 #2 0xc07557f9 in panic (fmt=Variable "fmt" is not available. ) at ../../../kern/kern_shutdown.c:563 #3 0xc0a63d6c in trap_fatal (frame=0xe6992ba8, eva=24) at ../../../i386/i386/trap.c:899 #4 0xc0a63ff0 in trap_pfault (frame=0xe6992ba8, usermode=0, eva=24) at ../../../i386/i386/trap.c:812 #5 0xc0a6499c in trap (frame=0xe6992ba8) at ../../../i386/i386/trap.c:490 #6 0xc0a4a91b in calltrap () at ../../../i386/i386/exception.s:139 #7 0xc0839301 in ready_event_wfq (p=0xc6443e00, head=0xe6992c8c, tail=0xe6992c88) at ../../../netinet/ip_dummynet.c:700 #8 0xc083a965 in dummynet_task (context=0x0, pending=1) at ../../../netinet/ip_dummynet.c:799 #9 0xc0784fb5 in taskqueue_run (queue=0xc6591d80) at ../../../kern/subr_taskqueue.c:255 #10 0xc07851bb in taskqueue_thread_loop (arg=0xc0c02990) at ../../../kern/subr_taskqueue.c:374 #11 0xc0735559 in fork_exit (callout=0xc0785100 <taskqueue_thread_loop>, arg=0xc0c02990, frame=0xe6992d38) at ../../../kern/kern_fork.c:781 #12 0xc0a4a990 in fork_trampoline () at ../../../i386/i386/exception.s:205 (kgdb)
Рових малко в google и стигнах до няколко подобни проблеми, като всичко там води към натрупване на грешки по интерфейса. Като проверя моите, излиза следното: GeSHi (Bash): netstat -i -b -n -I le3 Name Mtu Network Address Ipkts Ierrs Ibytes Opkts Oerrs Obytes Coll le3 1500 <Link#4> 00:*:56:*:65:* 13041589 522 2744708145 8512484 0 845707843 0 le3 1500 95.*.128.* 95.*.128.* 1519887 - 884665643 8512371 - 726528457 -
GeSHi (Bash): netstat -i -b -n -I le1 Name Mtu Network Address Ipkts Ierrs Ibytes Opkts Oerrs Obytes Coll le1 1500 <Link#2> 00:*:26:*:35:* 12998056 650 1843494915 17158552 0 3861703475 0 le1 1500 192.168.1.0/ 192.168.1.1 795085 - 97119029 971136 - 716719789 -
Следва проверка с: sysctl -a | grep dev.le , но тук ми излизат само: GeSHi (Bash): dev.le.1.%desc: AMD PCnet-PCI dev.le.1.%driver: le dev.le.1.%location: slot=18 function=0 dev.le.1.%pnpinfo: vendor=0x1022 device=0x2000 subvendor=0x1022 subdevice=0x2000 class=0x020000 dev.le.1.%parent: pci0
което явно е в следствие липсата на DEBUG режим зададен в кърнела?В примерите ( тук и тук които гледам, има редовете със stats.rxПример: GeSHi (Bash): dev.bge.0.stats.rx.FCSErrors: 0 dev.bge.0.stats.rx.AlignmentErrors: 0 dev.bge.0.stats.rx.xonPauseFramesReceived: 0 dev.bge.0.stats.rx.xoffPauseFramesReceived: 0 dev.bge.0.stats.rx.ControlFramesReceived: 0 dev.bge.0.stats.rx.xoffStateEntered: 0 dev.bge.0.stats.rx.FramesTooLong: 799
Интересното е, че имам друго FreeBSD, пуснато на същия този виртуален ценър, има доволно много грешки: GeSHi (Bash): netstat -i -b -n -I le0 Name Mtu Network Address Ipkts Ierrs Ibytes Opkts Oerrs Obytes Coll le0 1500 <Link#1> 00:*:56:*:51:* 408290228 27731 2348559573 180869579 0 1882814631 0 le0 1500 192.168.1.0/ 192.168.1.102 148512144 - 3975305044 166778260 - 2743899286 -
. но няма никакви проблеми с него и има почти две години ъптайм. Като цяло питането ми е, правилно ли съм се насочил (активиране на DEBUG и прекомпилиране) или да търся нещо друго?
|
|
|
35
|
Linux секция за начинаещи / Настройка на програми / Re: CentOS и Bandwidth Quotas с iptables
|
-: Feb 28, 2015, 18:07
|
/sbin/tc qdisc add dev eth0 root handle 1: htb /sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 1024kbps /sbin/tc class add dev eth0 parent 1:1 classid 1:5 htb rate 512kbps ceil 640kbps prio 1 /sbin/tc class add dev eth0 parent 1:1 classid 1:6 htb rate 100kbps ceil 160kbps prio 0 /sbin/tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 5 fw flowid 1:5 /sbin/tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 6 fw flowid 1:6 /sbin/iptables -A OUTPUT -t mangle -p tcp --sport 80 -j MARK --set-mark 5 /sbin/iptables -A OUTPUT -t mangle -p tcp --sport 22 -j MARK --set-mark 6
до колкото помня май с CLASSIFY --set-class работеше по бързо не съм ползвал iptables от няколко години има примери доста най-вероятно и за тая новост има не си задаваш въпроса в гугле правилно
Абе уж тествах всякакви комбинации с въпросния адон, но... Нямам конкретни предпочитания, така че може и да ползвам tc , само ако може жокер за 1вите два реда: /sbin/tc qdisc add dev eth0 root handle 1: htb /sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 1024kbps Останалите ги "прочитам"
|
|
|
36
|
Linux секция за начинаещи / Настройка на програми / CentOS и Bandwidth Quotas с iptables
|
-: Feb 28, 2015, 15:47
|
Здравейте, Исках да огранича скороста за сваляне на файлове през http, та реших да сложа някаква квота. Намерих си аз един менюал, но се оказа, че patch-o-matic-ng вече не се съпортва и хората ме пращат към xtables-addons. Свалих си аз xtables-addons и после Превъртях нета да търся някакви примери, но или изобщо не се ползва за лимитиране или е баси табуто... Гледам, че има възможност това да стане с httpd mod_bw.conf, но ми се иска да ползвам iptables, за да мога после да лимитирам и други неща (ftp и т.н.) П.С. CentOS release 6.2 с 2.6.32-220.el6.i686
|
|
|
38
|
Сигурност / Системна Сигурност / Critical GHOST vulnerability affects most Linux Systems - CVE-2015-0235
|
-: Jan 28, 2015, 13:26
|
Става дума за проблем в GNU C Library (glibc), които се ползва в повечето Linux дистрибуции. Buffer overflow намерен в __nss_hostname_digits_dots() функцията в glibc. Повече инфо тукЗасяга доста широка група от приложение: Apache, Exim, Sendmail, Nginx, MySQL, CUPS, Samba и т.н (при exim дори не било нужно да се отваря писмото с expl-та и прескача защити като ASLR, PIE и NX) Ето как може да тествате дали сте vuln: GeSHi (Bash): (mrowcp@shells) cat > GHOST.c << EOF #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #define CANARY "in_the_coal_mine" struct { char buffer[1024]; char canary[sizeof(CANARY)]; } temp = { "buffer", CANARY }; int main(void) { struct hostent resbuf; struct hostent *result; int herrno; int retval; /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/ size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1; char name[sizeof(temp.buffer)]; memset(name, '0', len); name[len] = '\0'; retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno); if (strcmp(temp.canary, CANARY) != 0) { puts("vulnerable"); exit(EXIT_SUCCESS); } if (retval == ERANGE) { puts("not vulnerable"); exit(EXIT_SUCCESS); } puts("should not happen"); exit(EXIT_FAILURE); } EOF
При мен на CentOS 6.2 GeSHi (Bash): (mrowcp@shells)(~/scripts)>uname -a Linux shells 2.6.32-220.el6.i686 #1 SMP Tue Dec 6 16:15:40 GMT 2011 i686 i686 i386 GNU/Linux (mrowcp@shells)(~/scripts)>gcc GHOST.c -o GHOST (mrowcp@shells)(~/scripts)>./GHOST vulnerable
Фикса е в ъпдейт Вече има такъв за повечето дистрота. ЕДИТ: В момента: GeSHi (Bash): Installed Packages Name : glibc Arch : i686 Version : 2.12 Release : 1.47.el6_2.12
След ъпдейт до: GeSHi (Bash): Name : glibc Arch : i686 Version : 2.12 Release : 1.149.el6_6.5 (mrowcp@shells)(~/scripts)>./GHOST not vulnerable
|
|
|
39
|
Linux секция за начинаещи / Настройка на хардуер / Re: Драйвъри на АМД за HD 4850
|
-: Dec 29, 2014, 21:00
|
За да има артефакти има повреда в видео картата. И аз съм с подобна карта и с отворен драйвер но няма грижи, не е от ядрото причината. Струва ми се че е прегрявана тази видеокарта. Не е била проверявана за състоянието на охлаждането.
Така е, прав си Но при тест с XP и по-ниски драйвъри (не последните налични за Win), малко ъндърклок и добро охлаждане, няма артефакти, даже си търкаля 3D-то. Държи 64 градуса натоварена на 100%. Чудя се дали да не я "сготвя" или "продухам" със сешоара, но дали изобщо ще има ефект... ? @bvbfan принципно искам ако може да си запазя Cent-a. Така или иначе за какво ми е последното ядро, след като хардуеъра ми е стар? Просто ще пачна, ако има някакви екслойти и ще си търкалям с него. Но може и нещо да пропускам @gat3way според сайта на AMD, това са последните драйвъри за тази карта. Бях ти писал на мейл за проблема ми с hashkill точно от тази карта
|
|
|
40
|
Linux секция за начинаещи / Настройка на хардуер / Драйвъри на АМД за HD 4850
|
-: Dec 29, 2014, 12:16
|
Инсталирах си аз последната версия на CentOS, но се оказа, че драйвърите за видеото които идват с ОС-а, нещо не се харесват от хардуеъра (HD 4850 512 MB) и се получават едни артефакти. Когато ги преинсталирам през yum, картината е ОК, но пък липсва информация за температура и т.н. в sensors. Опитах да пусна няколко 3D теста, но без усех. Реших да инсталирам официалните драйвъри от сайта на AMD. Последните такива са: AMD Catalyst™ 13.1 Proprietary Linux x86 Display DriverПроблема ми идва с пояснението: Description: Automated installer and Display Drivers for Xorg 6.9 to Xserver 1.12 and Kernel version up to 3.4Аз ще даунгрейдна графичната среда и кърнела, но кой от всичките 3.4 да сваля? Ще се инсталират ли на linux-3.4.105.tar.xz или да сваля точно 3.4 или пък последния от предното "поколение" linux-3.3.8.tar.gz
|
|
|
41
|
Програмиране / Общ форум / Re: Помощ за bash скрипт
|
-: Dec 24, 2014, 07:35
|
Тогава какво правим при пуснат httpd на 192.168.1.10 и завърнал се 192.168.1.1 с MAC 00:11:22:33:44:55? Искам тоя httpd да го спра.
Тогава ще влезеш в if-овете, които водят до това
GeSHi (Bash): echo "Main PC is here, lets stop httpd"
и httpd ще бъде спрян. Струва ми се, че не успяваш да си представиш добре обхвата на ситуациите от if-овете. Пробвай скрипта в по-реално изпълнение, за да добиеш представа.
Напълно си прав! Мерси за търпението и за помоща. Весели празници
|
|
|
42
|
Програмиране / Общ форум / Re: Помощ за bash скрипт
|
-: Dec 23, 2014, 16:36
|
Влиза в 3тия if и не изпълнява командата:
Изглежда, че очакваш след тези два реда
+ [[ 00:aa:bb:cc:dd:ee == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]] + [[ 80 == '' ]] да видиш ред
echo 'Main PC missing, lets start httpd' само че няма как да го видиш, защото httpd вече е стартиран. Ще го видиш, ако при влизането в този if имаш спрян httpd.
П.П.: И стига си махал интервала след числото 80 в netstat командата - нарочно съм ти добавил този интервал, за да не ти се получава колизия с евентуален процес, който може да бъде пуснат на порт 800 и да ти счупи проверката Върни и звездичката пред точката на порта в netstat командата, че да избегнеш и колизия с IP, съдържащо ".80".
Добре, приемам критиката, върнах ги Тогава какво правим при пуснат httpd на 192.168.1.10 и завърнал се 192.168.1.1 с MAC 00:11:22:33:44:55? Искам тоя httpd да го спра.
|
|
|
43
|
Програмиране / Общ форум / Re: Помощ за bash скрипт
|
-: Dec 23, 2014, 12:44
|
Както romeo_ninov каза, FreeBSD не е дистрибуция, а отделна и различна операционна система. Когато в този форум се зададе въпрос в раздел, извън BSD секцията, и не се спомене, че става дума за друга операционна система, по подразбиране се приема, че става дума за Linux. В такива случаи е задължително да споменаваш операционната система, за която става дума, за да не стават обърквания - FreeBSD не е Linux и е различен от него.
За скрипта. Аз го написах за bash. Имаш ли bash? Ако имаш, той в /bin/bash ли е? Ако не е, смени пътя до него в началото на скрипта. Ако нямаш bash, ще си го качиш ли, или да пренаписваме скрипта за твоя shell? Ако ще го пренаписваме, кой е твоят shell, че да не пропуснем нещо? Да, в *BSD варианта на netstat параметърът "-p" има друга функция (указване на протокол), така че отпада от командата в случая. Трябва обаче да смениш и изписването на порт 80, защото и то е различно:
GeSHi (Bash): httpdStatus=$(netstat -an | grep '*.80 ')
Провери си и дали твоят cron знае за пътищата до arping, netstat и httpd, и ако не ги знае, ползвай пълни пътища или си ги опиши в PATH променливата. Надолу if-овете са си екстра, стига правилно да си изписал MAC адреса и командите за пускане и спиране на httpd.
ОК, съгласен съм. Исках друго да кажа, но то какво стана Знам разликата, а не споменавам, защото смятам, че сам мога да оправя пътя на командите. Имах затруднения в логиката. Да имам баш и мисля, че се вижда от дебъга или греша?Ето пак за всеки случай: bash --help GNU bash, version 3.2.25(0)-release-(i386-portbld-freebsd7.0)Пътя е сменен, но дори и да не е, пробвах скрипта ти без двойните [ и с разни други промени, но без резултат, въпреки, че има логиката да работи. Порта е сменен което също се вижда от дебъга който съм постнал. Ще се повторя, но пак ще кажа: Скрипта работи само когато ИП с МАК 00:11:22:33:44:55 е на линия. От което автоматично следва, че всички пътища до въпросните команди са ОК. Ако сменя ИП-то към което пращам arp или сменя порта на несъществуващ, скрипта не работи. Влиза в 3тия if и не изпълнява командата: GeSHi (Bash): bash -x /custom/mac_check_v2.sh ++ arping -c 1 192.168.1.1 ++ grep from ++ awk '{print $4}' + testPC=00:aa:bb:cc:dd:ee ++ netstat -an ++ grep .80 ++ tail -n 1 ++ awk '{print $4}' ++ cut -c3-4 + httpdStatus=80 + [[ 00:aa:bb:cc:dd:ee == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]] + [[ 80 == '' ]]
и когато всичко е ОК GeSHi (Bash): bash -x /custom/mac_check_v2.sh ++ arping -c 1 192.168.1.1 ++ grep from ++ awk '{print $4}' + testPC=00:11:22:33:44:55 ++ netstat -an ++ grep .80 ++ tail -n 1 ++ awk '{print $4}' ++ cut -c3-4 + httpdStatus=80 + [[ 00:11:22:33:44:55 == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]] + [[ 80 != '' ]] + echo 'Main PC is here, lets stop httpd' Main PC is here, lets stop httpd
Скрипта: GeSHi (Bash): #!/usr/local/bin/bash testPC=$(arping -c 1 192.168.1.1 | grep from | awk '{print $4}') httpdStatus=$(netstat -an | grep '.80' | tail -n 1 | awk '{print $4}' |cut -c3-4) if [[ "$testPC" == "00:11:22:33:44:55" ]]; then if [[ "$httpdStatus" != "" ]]; then echo "Main PC is here, lets stop httpd" fi else if [[ "$httpdStatus" == "" ]]; then echo "Main PC missing, lets start httpd" fi fi
Разбира се, може и аз да бъркам покрай всичките тези промени и средата която ползвам (/bin/csh).
|
|
|
44
|
Програмиране / Общ форум / Re: Помощ за bash скрипт
|
-: Dec 23, 2014, 07:44
|
Ако условието с мак адреса не е задължително (тъй като на мен проверка по мак адрес не ми се струва уместна за това дали уеб сървъра работи или не) можеш да правиш следното
GeSHi (Bash): #!/bin/bash /usr/bin/wget --timeout=2 --tries=1 127.0.0.1 if [ "$?" -eq "0" ]; then echo "Remote webserver is running" echo "Checking for local web server pids..." /sbin/pidof httpd if [ "$?" -eq "0" ]; then echo "Stopping local webserver" /etc/init.d/httpd stop fi else echo "Remote webserver is down, starting local httpd" /etc/init.d/httpd start fi
Нужно е само да смениш ip адреса тъй като аз тествам локално - ако е пуснат го спира, ако е спрян го пуска на локалната машина тъй като за remote използвам localhost-а и можеш да си пренасочиш stdout, stderr към /dev/null но го тествай естествено преди да пренасочваш. Хубаво е да се добавят и още проверки...например дали след /etc/init.d/httpd stop реално е спрял или направо с kill... Не съм сигурен че изцяло разбирам проверката на MAC-а и защо трябва да е нов при повторно стартиране на remote сървъра, но можеш да използваш части от горното за твоя скрипт.
Условието за МАК-а е за да знам, че физически 192.168.1.1 е подмненен с друг сървър. Поредната питанка
Не ти трябва писане на статуси във външен файл, освен ако не искаш да си пазиш някакъв лог (което не е видно от това, което си написал). За проверката на стартиран httpd има много варианти, но щом те радва с netstat, в примера по-долу ти го давам с netstat, като съм добавил извеждане и на имената на процесите и grep-ване за httpd, че да не стане грешка, ако си пуснал друг процес на порт 80. Всъщност, при това проверката за порт 80 може да отпадне, но пък, ако остане, ще ти подсигурява, че става дума за httpd-то на порт 80, така че ти си решаваш. Командите за пускане и спиране на httpd ще си ги допишеш сам, че твърде много варианти станаха напоследък
GeSHi (Bash): #!/bin/bash testPC=$(arping -c 1 192.168.1.1 | grep from | awk '{print $4}') httpdStatus=$(netstat -anp | grep ':80 ' | grep httpd) if [[ "$testPC" == "00:11:22:33:44:55" ]]; then if [[ "$httpdStatus" != "" ]]; then #Команда за спиране на httpd fi else if [[ "$httpdStatus" == "" ]]; then #Команда за стартиране на httpd fi fi
Добре, скрипта работи когато 192.168.1.1 с мак 00:11:22:33:44:55 е на линия, но не и ако се появи новия 192.168.1.1 който има мак 00:aa:bb:cc:dd:ee на мястото на 00:11:22:33:44:55 GeSHi (Bash): ++ arping -c 1 192.168.1.1 ++ grep from ++ awk '{print $4}' + testPC=00:aa:bb:cc:dd:ee ++ netstat -an ++ grep .80 + httpdStatus='tcp4 0 0 192.168.1.1.445 192.168.1.204.3806 ESTABLISHED tcp4 0 0 *.80 *.* LISTEN' + [[ 00:aa:bb:cc:dd:ee == \0\0\:\a\a\:\b\b\:\c\c\:\d\d\:\e\e ]] + [[ tcp4 0 0 192.168.1.1.445 192.168.1.204.3806 ESTABLISHED tcp4 0 0 *.80 *.* LISTEN == '' ]]
Ще се опитам пак да го скицирам 192.168.1.1 има httpd, обаче спира тока. Нашия скрипт, пуснат в кронтаб-а на 192.168.1.10, първо праща WOL пакет и буди новия 192.168.1.1 - 00:aa:bb:cc:dd:ee Тъй като той (00:aa:bb:cc:dd:ee) няма httpd, за това на същата тази машина 192.168.1.10, нашия скрипт тярбва да стартира и httpd (след като 00:aa:bb:cc:dd:ee е UPнат). От своя страна събудилия се нов 192.168.1.1, автоматично пренасочва всички заявки за порт 80 към 192.168.1.10 и всичко е 6 точки. "Дистрото" е FreeBSD (192.168.1.10) и липсва параметър -p на netstat, което не е фатално де, просто пояснявам за да няма ползване на липсващи команди .... httpdStatus=$(netstat -anp | grep ':80 ' | grep httpd) ....
Може и с service httpd status или wget http://ip|grep нещоси
Нямам service (FreeBSD), а и ми трябва проверката по MAC-а
|
|
|
45
|
Програмиране / Общ форум / Re: Помощ за bash скрипт
|
-: Dec 21, 2014, 18:48
|
Поредната питанка Мъча се тука от... известно време със следния скрипт: 1) Искам да проверява дали дадено ПС в мрежата не е "сменено" с друго (физически отпада и се вдига друго на негово място) -> За целта правя: arping IP и следя мак-а. 2) Ако ПС-то е друго, искам да стартирам httpd на машината от която правя проверката -> тука е ясно 3) При връщане на отпадналото ПС, да спра httpd на машината от която правя проверката -> тука вече не ми е ясно как да стане Какво имам до момента: GeSHi (Bash): missingpc=`arping -c 1 192.168.1.1 | grep from |awk '{print $4}'` if [ $missingpc = 00:11:22:33:44:55 ];then echo 0 > /var/log/missingpc.status exit else echo 1 > /var/log/missingpc.status fi status=`cat /var/log/missingpc.status` if [ $status -eq 0 ];then echo "No change" else echo "Missing PC, lets start local httpd" fi
При еднократно стартиране е ОК, но аз искам да го забия в кронтаб-а да проверява на всеки 3мин. Съответно при повторното стартиране, ще види отново, че 192.168.1.1 е с нов MAC и ще се опита пак да стартира httpd, а аз искам да exit-ва, ако вече е стартиран. Мога да проверявам с netstat -na |grep :80 , и да излиза от скрипта, но не мога да определя как да вмъкна тази проверка
|
|
|
|