FastNetMon

Friday, 30 November 2012

Подсистема форка CGI процессов в PHP в пятидесяти строках


#include
#include
# include

//struct sigaction act, old_term, old_quit, old_int;
static int parent = 1;
static int children = 4;
int status = 0;
/*
void fastcgi_cleanup(int signal) {
sigaction(SIGTERM, &old_term, 0);
    printf("Signal handler\n");
    exit(0);
}
*/
int main() {
    int running = 0;
    /*
    act.sa_flags = 0;
    act.sa_handler = fastcgi_cleanup;
    if (sigaction(SIGTERM, &act, &old_term) ||
        sigaction(SIGINT,  &act, &old_int)  ||
        sigaction(SIGQUIT, &act, &old_quit)
    ) {  
        printf("Can't set signals");
        exit(1);
    }
    */
    while (parent) {
        do {
            int pid = fork();

            switch (pid) {
                case 0:
                    printf("Start child: %d\n",  getpid());
                /* Child */
    /*    
          sigaction(SIGTERM, &old_term, 0);
                sigaction(SIGQUIT, &old_quit, 0);
                sigaction(SIGINT,  &old_int,  0);
*/
                    parent = 0;
                    break;
                default:
                    printf ("Master: %d\n", getpid());
                     running++;
                    break;
            }
            } while (parent && (running < children));
            if (parent) {
   
                while (1) {
                    if (wait(&status) >= 0) {
                        printf("Master wait loop\n");
                        running--;
                       
                        printf("Master: child killed\n");
                        break;
                    }  
                }  

            }
    }

    if (!parent) {
               printf("Child start to work: %d\n", getpid());
   
                int counter = 0;
                while (1) {
                    counter++;
                    sleep(1);
                    if (counter > 5) {
                        break;
                    }  
                }  
   
                printf("stop %d process\n", getpid());
                exit(0);
    }
}

Код вычленен из оригинального: sapi/cgi/cgi_main.c

Отладка FastCGI приложений - подключение клиентом без веб-сервера

Очень часто возникает проблема, как отладить FastCGI приложение непосредственно, без веб-сервера.
wget https://raw.github.com/adoy/PHP-FastCGI-Client/master/fastcgi.php

Создаем файлик:
require('fastcgi.php');
$client = new FCGIClient('localhost', '9001');
$content = 'key=value';
echo $client->request(
    array(    
        'GATEWAY_INTERFACE' => 'FastCGI/1.0',
        'REQUEST_METHOD' => 'GET',
        'SCRIPT_FILENAME' => 'index.php',
        'SERVER_SOFTWARE' => 'php/fcgiclient',
        'REMOTE_ADDR' => '127.0.0.1',
        'REMOTE_PORT' => '9985',
        'SERVER_ADDR' => '127.0.0.1',
        'SERVER_PORT' => '80',
        'SERVER_NAME' => 'mag-tured',
        'SERVER_PROTOCOL' => 'HTTP/1.1',
        #'CONTENT_TYPE' => 'application/x-www-form-urlencoded',
        'CONTENT_LENGTH' => strlen($content)
    ),
    $content
);

После этого запускаем скрипт и получаем от бэкэнда выдачу :)
Отдельное спасибо автору этого чудо-скрипта.




Что за apple-touch-icon.png и apple-touch-icon-precomposed.png в логах сервера?

Это, оказывается, аналог (красивый и круглый!) favicon.ico, но для iPad и прочих Apple дивайсов. Спека может быть найдена по адресу.

Источник: http://sigov.ru/2012/05/10/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-apple-touch-icon-png/

У сильных мира сего можно найти их по адресу:
http://fb.com/apple-touch-icon.png

Monday, 26 November 2012

Centos 5 and gateway in different subnet

When you try to use IP with gateway in different subnet you can got a very strange issues.
Допустим, шлюз у нас 159.x.x.1, а IP 193.y.y.101, то вписываем
GATEWAY=159.x.x.1
В  /etc/sysconfig/network, а в /etc/sysconfig/network-scripts/route-eth0 вписываем следующее:
159.x.x.1 dev eth0
default via 159.x.x.1

При этом, в конфиге сети ifcfg-eth0, разумеется, статикой прописываем IPADDR=193.y.y.101

Если мы все сделали верно, после перезагрузки системы/рестарта сети данный IP станет доступен снаружи.


Source: http://www.adminsehow.com/2011/09/gateway-on-a-different-subnet-on-linux/ и http://www.nibshost.com/account/knowledgebase/20/Networking-IP-in-diffrent-subnet-Linux-on-Centos-commandline-.html (огромное спасибо автору!)



Tuesday, 20 November 2012

Google Spreadsheet / таблицы - узнать курс валюты

Прямая выгрузка прямо с ЦБРФ:
=IMPORTXML("http://www.cbr.ru/scripts/XML_daily.asp";"//ValCurs/Valute[@id="&char(34)&"R01239"&char(34)&"]/Value")
Через Google Finance (дает весьма странные курсы):
= GoogleFinance("Currency:EURRUB") 

Google Docs / Drive таблицы - как зафиксировать ячейку?

При автопродолжении формул на несколько строк вниз все ячейки, указаныне в формуле сдвигаются, чтобы этого избежать, нужно перед обоими координатами поставить знак доллара, это зафиксирует их: =E3*0,8*$G$1.

Sunday, 18 November 2012

Активация API для Google Double Click / DFP / DFA

Есть чудо сервис - Google Double Click, с ним имеется одна проблема - пример по активации API из документации не работает (Your DFA account must be enabled for API Access. You can complete an application to use the DFA API by filling out this form) и при переходе по ссылке http://google.com/support/dfa/bin/request.py?contact_type=dfa6api ничего не происходит.

Что делать? Входим в сервис: https://www.google.com/dfp, щелкаем в самом верху по треугольничек рядом со своим логином, там вываливается пункт "Пользовательские настройки", далее "Язык отображения" - English/US.

После этого в правом верхнем углу панели видим строку Admin, там видим переключатель "API Access", переводим его в состояние включено, соглашаемся с лицензией на оказание услуг и радуемся жизни!

Суть проблемы в том, что такого пункта на русскоязычной версии сервиса просто не существует. Но, по логике вещей, можно вернуться на русский язык и API не отключится.

P.S. требую пива за рецепт! Полтора дня потратил на поиски! :)))

Friday, 16 November 2012

На каких DNS серверах работают корневые DNS?

K-root работает на NSD: http://www.nlnetlabs.nl/projects/nsd/

ошибка: "ploop-lib-1.4-1" задает несколько пакетов

Либо на английском:
LANG=C rpm -e --nodeps ploop ploop-lib
error: "ploop-lib" specifies multiple packages
Внешне это выглядит как сущий абсурд:
rpm -qa|grep ploop
ploop-lib-1.4-1
ploop-lib-1.4-1

На деле же это два разных пакета, но про разные архитетуры:
rpm -q --queryformat "%{name}.%{arch}\n"  ploop-lib
ploop-lib.x86_64
ploop-lib.i386

Фикс:
rpm -e --nodeps ploop-lib.x86_64
rpm -e --nodeps ploop-lib.i386
Источник: http://linuxhostingsupport.net/blog/rpm-remove-error-specifies-multiple-packages 

Thursday, 15 November 2012

Статистика работы Bind/Named

Самый первый и очевидный способ получить информацию о работе Bind - это rndc:

 rndc status
version: 9.7.3 (BIND)
CPUs found: 16
worker threads: 16
number of zones: 149323
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
Но тут почти нету ничего интересного и важного, что же делать?  Активировать расширенную статистику (здесь и далее все примеры для Debian):
vim /etc/bind/named.conf.options

Там добавляем в блок options:
statistics-file "/var/run/named/named.stats";
Применяем конфигурацию:
rndc reload
Осуществляем сброс статистики в файл:
rndc stats
Просматриваем:
cat /var/run/named/named.stats 

Выглядит в итоге статистика примерно вот так:
cat /var/run/named/named.stats
+++ Statistics Dump +++ (1352974226)
++ Incoming Requests ++
           208759943 QUERY
                   8 IQUERY
               11847 NOTIFY
               51927 UPDATE
++ Incoming Queries ++
                   4 RESERVED0
           167218906 A
             1110579 NS
               28274 CNAME
              189483 SOA
              391344 PTR
                 567 HINFO
             9556451 MX
              759870 TXT
                  33 RP
                   2 AFSDB
            28448043 AAAA
               91280 SRV
                 490 NAPTR
               77647 A6
                 913 DS
                 257 SSHFP
                  55 RRSIG
                3306 DNSKEY
                 257 NSEC3PARAM
                 278 TYPE52
              178186 SPF
                 804 TKEY
                   1 IXFR
                2284 AXFR
                   3 MAILB
              700618 ANY
                   5 Others
++ Outgoing Queries ++
[View: default]
                 758 A
                  19 NS
                 870 AAAA
[View: _bind]
++ Name Server Statistics ++
           208824909 IPv4 requests received
           126888579 requests with EDNS(0) received
               15310 TCP requests received
            38665964 auth queries rejected
            12280385 recursive queries rejected
                2207 transfer requests rejected
               51927 update requests rejected
           208824904 responses sent
                 152 truncated responses sent
           126888577 responses with EDNS(0) sent
           119637521 queries resulted in successful answer
           158234385 queries resulted in authoritative answer
               69103 queries resulted in non authoritative answer
               69103 queries resulted in referral answer
            20418156 queries resulted in nxrrset
              208315 queries resulted in SERVFAIL
            18178708 queries resulted in NXDOMAIN
            50245852 other query failures
++ Zone Maintenance Statistics ++
              216262 IPv4 notifies sent
                 164 IPv6 notifies sent
                6278 IPv4 notifies received
++ Resolver Statistics ++
[Common]
                 541 mismatch responses received
[View: default]
                1450 IPv4 queries sent
                 197 IPv6 queries sent
                1340 IPv4 responses received
                 100 NXDOMAIN received
                  30 SERVFAIL received
                  44 other errors received
                  25 EDNS(0) query failures
                   1 truncated responses received
                   7 lame delegations received
                 417 query retries
                 122 query timeouts
                 313 IPv4 NS address fetches
                 341 IPv6 NS address fetches
                  61 IPv4 NS address fetch failed
                 286 IPv6 NS address fetch failed
                 166 queries with RTT < 10ms
                 921 queries with RTT 10-100ms
                 243 queries with RTT 100-500ms
[View: _bind]
++ Cache DB RRsets ++
[View: default]
                  51 A
                  17 NS
                   1 CNAME
                  23 AAAA
                   2 DS
                   3 RRSIG
                   3 !AAAA
                   1 NXDOMAIN
[View: _bind (Cache: _bind)]
++ Socket I/O Statistics ++
               11012 UDP/IPv4 sockets opened
                 292 UDP/IPv6 sockets opened
                   4 TCP/IPv4 sockets opened
                   1 TCP/IPv6 sockets opened
               11009 UDP/IPv4 sockets closed
                 292 UDP/IPv6 sockets closed
               19556 TCP/IPv4 sockets closed
                 197 UDP/IPv6 socket connect failures
                1449 UDP/IPv4 connections established
                   1 TCP/IPv4 connections established
               19556 TCP/IPv4 connections accepted
                 351 UDP/IPv6 send errors
                   1 TCP/IPv4 send errors
                  10 UDP/IPv4 recv errors
                  12 TCP/IPv4 recv errors
++ Per Zone Query Statistics ++
--- Statistics Dump --- (1352974226)

Tuesday, 13 November 2012

Использование mydumper для бэкапа mysql

Использование mydumper для бэкапа mysql:
 time /opt/mydumper -t `cat /proc/cpuinfo|grep processor |wc -l` -c -B db_test -u root -p  password
 В моих тестах он показал более низкую производительность нежели mysqldump.

Как отписаться от рассылки, если вы были подписаны через googlemail.com?

Придется подделать обратный адрес вот таким образом:
echo "unsubscribe"| mail -r xxxx@googlemail.com -s unsubscribe  nginx-ru-request@nginx.org
 Зачем все это нужно? Ряд систем рассылки требуют отмены подписки с адреса, с которого была подписка (вполне разумно), до недавнего времени времени гмейл позволял отсылать письма и от имени гмейл и от имени гуглмейл, но вот недавно запретил посылку от гуглемейл и поэтому приходится немного хитрить, чтобы отписаться.

Monday, 12 November 2012

Ебический провал системы черных списков сайтов!

Лучше сказать сложно: http://ntv.livejournal.com/272460.html

По проверенным данным - уже есть первые жертвы среди хостеров, кому без предупреждения забанили IP адреса шаред-серверов.