Покажи Публикации - mrowcp
* Виж публикациите на потр. | Виж темите на потр. | Виж прикачените файлове на потр
Страници: 1 2 [3] 4 5 ... 31
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):
  1. #netstat -m
  2. 36/1884/1920 mbufs in use (current/cache/total)
  3. 13/1567/1580/25600 mbuf clusters in use (current/cache/total/max)
  4. 0/512 mbuf+clusters out of packet secondary zone in use (current/cache)
  5. 0/119/119/12800 4k (page size) jumbo clusters in use (current/cache/total/max)
  6. 0/0/0/6400 9k jumbo clusters in use (current/cache/total/max)
  7. 0/0/0/3200 16k jumbo clusters in use (current/cache/total/max)
  8. 35K/4081K/4116K bytes allocated to network (current/cache/total)
  9. 0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
  10. 0/0/0 requests for jumbo clusters denied (4k/9k/16k)
  11. 0/73/6656 sfbufs in use (current/peak/max)
  12. 0 requests for sfbufs denied
  13. 0 requests for sfbufs delayed
  14. 7 requests for I/O initiated by sendfile
  15. 0 calls to protocol drain routines
  16.  
  17. # sysctl kern.ipc.nmbclusters
  18. 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):
  1. netstat -i -w 1
  2.            input        (Total)           output
  3.   packets  errs      bytes    packets  errs      bytes colls
  4.      2167     0    1379324       2385     0    2006399     0
  5.      1759     0    1219967       1975     0    1820319     0
  6.      1762     0    1173325       1975     0    1771865     0
  7.      3973     0    2048293       4367     0    3164761     0
  8.      4797     0    1846254       5030     0    2543221     0
  9.      3504     0    1458508       3705     0    2054196     0
  10.      2115     0    1554739       2216     0    1894367     0
  11.      2212     1    1484002       2533     0    2392537     0
  12.      9573     5    7839601      12353     0   14573350     0
  13.      9594     5    8082062      12598     0   15286981     0
  14.      9560     6    8077210      12497     0   15133796     0
  15.      9904     7    8153599      12835     0   15304480     0
  16.     11425     7    9625388      14974     0   18238077     0
  17.     11353     9    9481029      14816     0   17864126     0
  18.     12814     4   10335644      16579     0   19374355     0
  19.      9452     7    7778154      12246     0   14551521     0
  20.     11317     8    9533213      14887     0   18043389     0
  21.      7649     3    6345857       9931     0   11812625     0
  22.      9019     2    6945061      11518     0   12721038     0
  23.      6832     1    4976888       8380     0    8712343     0
  24.     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):
  1. Fatal trap 12: page fault while in kernel mode
  2. cpuid = 1; apic id = 01
  3. fault virtual address   = 0x18
  4. fault code              = supervisor write, page not present
  5. instruction pointer     = 0x20:0xc0839301
  6. stack pointer           = 0x28:0xe6992be8
  7. frame pointer           = 0x28:0xe6992c58
  8. code segment            = base 0x0, limit 0xfffff, type 0x1b
  9.                        = DPL 0, pres 1, def32 1, gran 1
  10. processor eflags        = interrupt enabled, resume, IOPL = 0
  11. current process         = 32 (dummynet)
  12. trap number             = 12
  13. panic: page fault
  14. cpuid = 1
  15. Uptime: 22d0h37m29s
  16. Physical memory: 3059 MB
  17. Dumping 260 MB: 245 229 213 197 181 165 149 133 117 101 85 69 53 37 21 5
  18.  
  19. #0  doadump () at pcpu.h:195
  20. 195             __asm __volatile("movl %%fs:0,%0" : "=r" (td));

Следвам това ръководство и стигнах до:

Код
GeSHi (Bash):
  1. (kgdb) list *0xc0839301
  2. 0xc0839301 is in ready_event_wfq (../../../netinet/ip_dummynet.c:700).
  3. 695         if (p->if_name[0]==0 && p->numbytes < 0) { /* this implies bandwidth >0 */
  4. 696             dn_key t=0 ; /* number of ticks i have to wait */
  5. 697
  6. 698             if (p->bandwidth > 0)
  7. 699                 t = ( p->bandwidth -1 - p->numbytes) / p->bandwidth ;
  8. 700             dn_tag_get(p->tail)->output_time += t ;
  9. 701             p->sched_time = curr_time ;
  10. 702             heap_insert(&wfq_ready_heap, curr_time + t, (void *)p);
  11. 703             /* XXX should check errors on heap_insert, and drain the whole
  12. 704              * queue on error hoping next time we are luckier.
  13. (kgdb) backtrace
  14. #0  doadump () at pcpu.h:195
  15. #1  0xc0755537 in boot (howto=260) at ../../../kern/kern_shutdown.c:409
  16. #2  0xc07557f9 in panic (fmt=Variable "fmt" is not available.
  17. ) at ../../../kern/kern_shutdown.c:563
  18. #3  0xc0a63d6c in trap_fatal (frame=0xe6992ba8, eva=24) at ../../../i386/i386/trap.c:899
  19. #4  0xc0a63ff0 in trap_pfault (frame=0xe6992ba8, usermode=0, eva=24) at ../../../i386/i386/trap.c:812
  20. #5  0xc0a6499c in trap (frame=0xe6992ba8) at ../../../i386/i386/trap.c:490
  21. #6  0xc0a4a91b in calltrap () at ../../../i386/i386/exception.s:139
  22. #7  0xc0839301 in ready_event_wfq (p=0xc6443e00, head=0xe6992c8c, tail=0xe6992c88)
  23.    at ../../../netinet/ip_dummynet.c:700
  24. #8  0xc083a965 in dummynet_task (context=0x0, pending=1) at ../../../netinet/ip_dummynet.c:799
  25. #9  0xc0784fb5 in taskqueue_run (queue=0xc6591d80) at ../../../kern/subr_taskqueue.c:255
  26. #10 0xc07851bb in taskqueue_thread_loop (arg=0xc0c02990) at ../../../kern/subr_taskqueue.c:374
  27. #11 0xc0735559 in fork_exit (callout=0xc0785100 <taskqueue_thread_loop>, arg=0xc0c02990,
  28.    frame=0xe6992d38) at ../../../kern/kern_fork.c:781
  29. #12 0xc0a4a990 in fork_trampoline () at ../../../i386/i386/exception.s:205
  30. (kgdb)

Рових малко в google и стигнах до няколко подобни проблеми, като всичко там води към натрупване на грешки по интерфейса. Като проверя моите, излиза следното:

Код
GeSHi (Bash):
  1. netstat -i -b -n -I le3
  2. Name    Mtu Network       Address              Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll
  3. le3    1500 <Link#4>      00:*:56:*:65:* 13041589   522 2744708145  8512484     0  845707843     0
  4. le3    1500 95.*.128.* 95.*.128.*     1519887     -  884665643  8512371     -  726528457     -

Код
GeSHi (Bash):
  1. netstat -i -b -n -I le1
  2. Name    Mtu Network       Address              Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll
  3. le1    1500 <Link#2>      00:*:26:*:35:* 12998056   650 1843494915 17158552     0 3861703475     0
  4. le1    1500 192.168.1.0/ 192.168.1.1        795085     -   97119029   971136     -  716719789     -

Следва проверка с: sysctl -a | grep dev.le , но тук ми излизат само:
Код
GeSHi (Bash):
  1. dev.le.1.%desc: AMD PCnet-PCI
  2. dev.le.1.%driver: le
  3. dev.le.1.%location: slot=18 function=0
  4. dev.le.1.%pnpinfo: vendor=0x1022 device=0x2000 subvendor=0x1022 subdevice=0x2000 class=0x020000
  5. dev.le.1.%parent: pci0

което явно е в следствие липсата на DEBUG режим зададен в кърнела?В примерите (тук и тук които гледам, има редовете със stats.rx
Пример:

Код
GeSHi (Bash):
  1. dev.bge.0.stats.rx.FCSErrors: 0
  2. dev.bge.0.stats.rx.AlignmentErrors: 0
  3. dev.bge.0.stats.rx.xonPauseFramesReceived: 0
  4. dev.bge.0.stats.rx.xoffPauseFramesReceived: 0
  5. dev.bge.0.stats.rx.ControlFramesReceived: 0
  6. dev.bge.0.stats.rx.xoffStateEntered: 0
  7. dev.bge.0.stats.rx.FramesTooLong: 799

Интересното е, че имам друго FreeBSD, пуснато на същия този виртуален ценър, има доволно много грешки:

Код
GeSHi (Bash):
  1. netstat -i -b -n -I le0
  2. Name    Mtu Network       Address              Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll
  3. le0    1500 <Link#1>      00:*:56:*:51:* 408290228 27731 2348559573 180869579     0 1882814631     0
  4. le0    1500 192.168.1.0/ 192.168.1.102    148512144     - 3975305044 166778260     - 2743899286     -

. но няма никакви проблеми с него и има почти две години ъптайм.

Като цяло питането ми е, правилно ли съм се насочил (активиране на DEBUG и прекомпилиране) или да търся нещо друго?

33  Linux секция за начинаещи / Настройка на програми / Re: CentOS и Bandwidth Quotas с iptables -: Mar 01, 2015, 14:01
https://gist.github.com/akrasic/7242498#file-limit-tc-sh

Супер, мерси ;)
34  Linux секция за начинаещи / Настройка на програми / Re: CentOS и Bandwidth Quotas с iptables -: Feb 28, 2015, 19:26
Ахаа... знаех си аз, че това е "големината на тунела" :)
Мерси, ще разгледам, тествам и ако имам въпроси ще пиша.
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 от няколко години  има примери доста най-вероятно и за тая новост има не си задаваш въпроса в гугле правилно  [_]3

Абе уж тествах всякакви комбинации с въпросния адон, но...
Нямам конкретни предпочитания, така че може и да ползвам 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
37  Сигурност / Системна Сигурност / Re: Critical GHOST vulnerability affects most Linux Systems - CVE-2015-0235 -: Jan 30, 2015, 17:01
Възможно е тази уязвимост да засяга и WordPress CMS заради използването на wp_http_validate_url() функцията. Проверката става с:
Код
GeSHi (Bash):
  1. php -r '$e="0″;for($i=0;$i<2500;$i++){$e="0$e";} gethostbyname($e);' Segmentation fault

Повече инфо тук.
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):
  1. (mrowcp@shells) cat > GHOST.c << EOF
  2. #include <netdb.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <errno.h>
  7.  
  8. #define CANARY "in_the_coal_mine"
  9.  
  10. struct {
  11. char buffer[1024];
  12. char canary[sizeof(CANARY)];
  13. } temp = { "buffer", CANARY };
  14.  
  15. int main(void) {
  16. struct hostent resbuf;
  17. struct hostent *result;
  18. int herrno;
  19. int retval;
  20.  
  21. /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/
  22. size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;
  23. char name[sizeof(temp.buffer)];
  24. memset(name, '0', len);
  25. name[len] = '\0';
  26.  
  27. retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);
  28.  
  29. if (strcmp(temp.canary, CANARY) != 0) {
  30. puts("vulnerable");
  31. exit(EXIT_SUCCESS);
  32. }
  33. if (retval == ERANGE) {
  34. puts("not vulnerable");
  35. exit(EXIT_SUCCESS);
  36. }
  37. puts("should not happen");
  38. exit(EXIT_FAILURE);
  39. }
  40. EOF

При мен на CentOS 6.2

Код
GeSHi (Bash):
  1. (mrowcp@shells)(~/scripts)>uname -a
  2. Linux shells 2.6.32-220.el6.i686 #1 SMP Tue Dec 6 16:15:40 GMT 2011 i686 i686 i386 GNU/Linux
  3.  
  4. (mrowcp@shells)(~/scripts)>gcc GHOST.c -o GHOST
  5.  
  6. (mrowcp@shells)(~/scripts)>./GHOST
  7. vulnerable

Фикса е в ъпдейт :) Вече има такъв за повечето дистрота.

ЕДИТ: В момента:

Код
GeSHi (Bash):
  1. Installed Packages
  2. Name        : glibc
  3. Arch        : i686
  4. Version     : 2.12
  5. Release     : 1.47.el6_2.12

След ъпдейт до:

Код
GeSHi (Bash):
  1. Name        : glibc
  2. Arch        : i686
  3. Version     : 2.12
  4. Release     : 1.149.el6_6.5
  5.  
  6. (mrowcp@shells)(~/scripts)>./GHOST
  7. 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):
  1. 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):
  1. 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):
  1. bash -x /custom/mac_check_v2.sh
  2. ++ arping -c 1 192.168.1.1
  3. ++ grep from
  4. ++ awk '{print $4}'
  5. + testPC=00:aa:bb:cc:dd:ee
  6. ++ netstat -an
  7. ++ grep .80
  8. ++ tail -n 1
  9. ++ awk '{print $4}'
  10. ++ cut -c3-4
  11. + httpdStatus=80
  12. + [[ 00:aa:bb:cc:dd:ee == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]]
  13. + [[ 80 == '' ]]


и когато всичко е ОК

Код
GeSHi (Bash):
  1. bash -x /custom/mac_check_v2.sh
  2. ++ arping -c 1 192.168.1.1
  3. ++ grep from
  4. ++ awk '{print $4}'
  5. + testPC=00:11:22:33:44:55
  6. ++ netstat -an
  7. ++ grep .80
  8. ++ tail -n 1
  9. ++ awk '{print $4}'
  10. ++ cut -c3-4
  11. + httpdStatus=80
  12. + [[ 00:11:22:33:44:55 == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]]
  13. + [[ 80 != '' ]]
  14. + echo 'Main PC is here, lets stop httpd'
  15. Main PC is here, lets stop httpd

Скрипта:

 
Код
GeSHi (Bash):
  1. #!/usr/local/bin/bash
  2.  
  3.    testPC=$(arping -c 1 192.168.1.1 | grep from | awk '{print $4}')
  4.    httpdStatus=$(netstat -an | grep '.80' | tail -n 1 | awk '{print $4}' |cut -c3-4)
  5.  
  6.    if [[ "$testPC" == "00:11:22:33:44:55" ]]; then
  7.       if [[ "$httpdStatus" != "" ]]; then
  8.           echo "Main PC is here, lets stop httpd"
  9.       fi
  10.    else
  11.       if [[ "$httpdStatus" == "" ]]; then
  12.           echo "Main PC missing, lets start httpd"
  13.       fi
  14.    fi

Разбира се, може и аз да бъркам покрай всичките тези промени и средата която ползвам (/bin/csh).

44  Програмиране / Общ форум / Re: Помощ за bash скрипт -: Dec 23, 2014, 07:44
Ако условието с мак адреса не е задължително (тъй като на мен проверка по мак адрес не ми се струва уместна за това дали уеб сървъра работи или не) можеш да правиш следното


Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. /usr/bin/wget --timeout=2 --tries=1 127.0.0.1
  4.  
  5. if [ "$?" -eq "0" ]; then
  6.        echo "Remote webserver is running"
  7.        echo "Checking for local web server pids..."
  8. /sbin/pidof httpd
  9.        if [ "$?" -eq "0" ]; then
  10.        echo "Stopping local webserver"
  11.                /etc/init.d/httpd stop
  12.        fi
  13. else
  14.        echo "Remote webserver is down, starting local httpd"
  15. /etc/init.d/httpd start
  16. 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):
  1. #!/bin/bash
  2.  
  3. testPC=$(arping -c 1 192.168.1.1 | grep from | awk '{print $4}')
  4. httpdStatus=$(netstat -anp | grep ':80 ' | grep httpd)
  5.  
  6. if [[ "$testPC" == "00:11:22:33:44:55" ]]; then
  7.    if [[ "$httpdStatus" != "" ]]; then
  8.        #Команда за спиране на httpd
  9.    fi  
  10. else
  11.    if [[ "$httpdStatus" == "" ]]; then
  12.        #Команда за стартиране на httpd
  13.    fi  
  14. 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):
  1. ++ arping -c 1 192.168.1.1
  2. ++ grep from
  3. ++ awk '{print $4}'
  4. + testPC=00:aa:bb:cc:dd:ee
  5. ++ netstat -an
  6. ++ grep .80
  7. + httpdStatus='tcp4       0      0  192.168.1.1.445     192.168.1.204.3806    ESTABLISHED
  8. tcp4       0      0  *.80                   *.*                    LISTEN'
  9. + [[ 00:aa:bb:cc:dd:ee == \0\0\:\a\a\:\b\b\:\c\c\:\d\d\:\e\e ]]
  10. + [[ tcp4       0      0  192.168.1.1.445     192.168.1.204.3806    ESTABLISHED
  11. 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):
  1. missingpc=`arping -c 1 192.168.1.1 | grep from |awk '{print $4}'`
  2.        if [ $missingpc = 00:11:22:33:44:55 ];then
  3. echo 0 > /var/log/missingpc.status
  4. exit
  5.        else
  6. echo 1 > /var/log/missingpc.status
  7.        fi
  8.  
  9. status=`cat /var/log/missingpc.status`
  10.                if [ $status -eq 0 ];then
  11. echo "No change"
  12.                else
  13. echo "Missing PC, lets start local httpd"
  14.                fi
  15.  


При еднократно стартиране е ОК, но аз искам да го забия в кронтаб-а да проверява на всеки 3мин. Съответно при повторното стартиране, ще види отново, че 192.168.1.1 е с нов MAC и ще се опита пак да стартира httpd, а аз искам да exit-ва, ако вече е стартиран.
Мога да проверявам с netstat -na |grep :80 , и да излиза от скрипта, но не мога да определя как да вмъкна тази проверка :(
Страници: 1 2 [3] 4 5 ... 31