Показаны сообщения с ярлыком *nix. Показать все сообщения
Показаны сообщения с ярлыком *nix. Показать все сообщения

понедельник, 22 декабря 2014 г.

pkill: "Убийство" процессов по шаблону

Последние пару недель много работаю с Gearman, поэтому приходится "убивать" много процессов.

Например, у нас есть 3 запущенных php скрипта (в нашем случае 3 воркера)
$ ps aux | grep worker.php
isydorenko       8045   1.1  0.0  2578728   3784 s001  S     4:09PM   0:01.13 php worker.php
isydorenko       8037   1.0  0.1  2578728   5228 s001  S     4:09PM   0:01.13 php worker.php
isydorenko       8047   1.0  0.0  2578728   3772 s001  S     4:09PM   0:01.14 php worker.php
isydorenko       8089   0.0  0.0  2432784    628 s001  S+    4:15PM   0:00.00 grep worker.php

То есть мне нужно 3 раза запустить утилиту kill
$ kill -9 8045
$ kill -9 8037
$ kill -9 8047

Я быстро устал "килять" каждый процесс и нашел утилиту pkill, которая "киляет" процессы по шаблону
$ pkill -9 -f worker.php

Читать далее

вторник, 25 марта 2014 г.

Узнать время выполнения скрипта

Если вам нужно анализировать время выполнения скрипта (крон, индекс и т.д.), рекомендую посмотреть в сторону команды time
$ time php -f indexer.php

Читать далее

воскресенье, 3 марта 2013 г.

DLE: rewrite правила для nginx

Исторически так сложилось, что DataLife Engine (DLE) это первая CMS, которую я изучил. По-этому некоторые проекты еще крутятся на ней. С каждый годом этот геморрой становится все больнее, но пока что нет времени все переписывать.

2 недели назад мне пришло уведомление из ITL, что на серваке, на котором лежит мой VPS, посыпался винт. Извинились, дали 99% скидку на 2 месяца и сказали что надо бы переезжать на новый VPS. Заказал, предоставили чистую FreeBSD и начал Игорь сисадминить.

Сразу решил полностью отказаться от Apache, использовать только nginx. Думаю, все те кто юзал DLE помнят .htaccess с большим количеством реврайтов. Это и была основная проблема при миграции с Apache+nginx на standalone nginx. Авторы DLE позаботились об этом и предоставили rewrite правила для nginx (ссылка для тех, у кого спизженная CMS отсутствует лицензия - ТЫЦ). Но лично мне они не понравились, по-этому я продолжил поиски и собрал из нескольких источников следующий конфиг:

server {
    listen 80;
    server_name YOUR_HOST;

    root /path/to/document_root;

    rewrite ^/page/(.*)$ /index.php?cstart=$1 last;

    location / {
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2&day=$3 last;
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&day=$3&cstart=$4 last;
        rewrite "^/([0-9]{4})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2 last;
        rewrite "^/([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&cstart=$3 last;
        rewrite "^/([0-9]{4})(/?)+$" /index.php?year=$1 last;
        rewrite "^/([0-9]{4})/page/([0-9]+)(/?)+$" /index.php?year=$1&cstart=$2 last;
        rewrite "^/([^.]+)/page/([0-9]+)(/?)+$" /index.php?do=cat&category=$1&cstart=$2 last; 
        rewrite "^/([^.]+)(/?)+$" /index.php?do=cat&category=$1 last;
        index  index.php index.html index.htm;
    }

    location /tags/ {
        rewrite ^/tags/([^/]*)(/?)+$ /index.php?do=tags&tag=$1 last;
        rewrite ^/tags/([^/]*)/page/([0-9]+)(/?)+$ /index.php?do=tags&tag=$1&cstart=$2 last;
    }

    location /user/ {
        rewrite ^/user/([^/]*)/rss.xml$ /engine/rss.php?subaction=allnews&user=$1 last;
        rewrite ^/user/([^/]*)(/?)+$ /index.php?subaction=userinfo&user=$1 last;
        rewrite ^/user/([^/]*)/page/([0-9]+)(/?)+$ /index.php?subaction=userinfo&user=$1&cstart=$2 last;
        rewrite ^/user/([^/]*)/news(/?)+$ /index.php?subaction=allnews&user=$1 last;
        rewrite ^/user/([^/]*)/news/page/([0-9]+)(/?)+$ /index.php?subaction=allnews&user=$1&cstart=$2 last;
        rewrite ^/user/([^/]*)/news/rss.xml(/?)+$ /engine/rss.php?subaction=allnews&user=$1 last;
    }

    location /lastnews/ {
        rewrite ^/lastnews/(/?)+$ index.php?do=lastnews last;
        rewrite ^/lastnews/page/([0-9]+)(/?)+$ /index.php?do=lastnews&cstart=$1 last;
    }

    location /catalog/ {
        rewrite ^/catalog/([^/]*)/rss.xml$ /engine/rss.php?catalog=$1 last;
        rewrite ^/catalog/([^/]*)(/?)+$ /index.php?catalog=$1 last;
        rewrite ^/catalog/([^/]*)/page/([0-9]+)(/?)+$ /index.php?catalog=$1&cstart=$2 last;
    }

    location /newposts {
        rewrite ^/newposts(/?)+$ /index.php?subaction=newposts last;
        rewrite ^/newposts/page/([0-9]+)(/?)+$ /index.php?subaction=newposts&cstart=$1 last;
    }

    location /favorites {
        rewrite ^/favorites(/?)+$ /index.php?do=favorites last;
        rewrite ^/favorites/page/([0-9]+)(/?)+$ /index.php?do=favorites&cstart=$1 last;
    }

    location ~ \.(html|xml) {
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 last;
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 last;
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$" /engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 last;
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 last;
        rewrite "^/([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$4&news_page=$2&cstart=$3 last;
        rewrite "^/([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$2 last;
        rewrite "^/([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /engine/print.php?news_page=$2&newsid=$3 last;
        rewrite "^/([^.]+)/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2 last;
        rewrite "^/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$1&cstart=$2 last;
        rewrite "^/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&news_page=$1 last;
        rewrite "^/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /engine/print.php?news_page=$1&newsid=$2 last;
        rewrite "^/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$1 last;
        rewrite "^/static/(.*).html(/?)+$" /index.php?do=static&page=$1 last;
        rewrite ^/rules.html$ /index.php?do=rules last;
        rewrite ^/statistics.html$ /index.php?do=stats last;
        rewrite ^/addnews.html$ /index.php?do=addnews last;
        rewrite ^/([^.]+)/rss.xml$ /engine/rss.php?do=cat&category=$1 last;
        rewrite ^/page,([0-9]+),([^/]+).html$ /index.php?do=static&page=$2&news_page=$1 last;
        rewrite ^/print:([^/]+).html$ /engine/print.php?do=static&page=$1 last;
        rewrite ^/rss.xml$ /engine/rss.php last;
        rewrite ^/sitemap.xml$ /uploads/sitemap.xml last;
        rewrite ^/([^/]+).html$ /index.php?do=static&page=$1 last;
    }

    location ~* (uploads|uploads/fotos|templates|language)/.+\.php {
        deny all;
    }

    location ~* /templates/.+\.tpl {
        deny all;
    }

    location ~* (engine/cache) {
        deny all;
    }

    location ~ /\.ht {
        deny  all;
    }

    location ~* \.(jpg|jpeg|gif|png|ico|swf|css|js)$ {
        expires             30d;
        add_header          Cache-Control public;
    }

    # extra login to admin panel
    location =/admin.php {
        auth_basic            "closed section";
        auth_basic_user_file  htpasswd;
        fastcgi_pass   unix:/tmp/fastcgi.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000; # or socket
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

Конфиг проверен и успешно работает на моем проекте, но не стоит вслепую его копировать. Лучше разобраться: возможно, что-то вам покажется лишним или, наоборот, недостаточным.

Читать далее

пятница, 16 декабря 2011 г.

Как узнать количество места в *nix

Первым делом читаем:
$ man df

Если после этого все-равно ничего не получается, то подскажу несколько примеров использования данной утилиты
1. Узнать общее количество места на дисках:
$ df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    496M    334M    122M    73%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ad0s1e    1.9G     30M    1.7G     2%    /tmp
/dev/ad0s1f     13G     11G    1.1G    91%    /usr
/dev/ad0s1d    2.9G    881M    1.8G    32%    /var

2. Узнать количество месте в определенной папке:
$ du -hd 1 /var
2.0K    /var/.snap
2.0K    /var/account
6.0K    /var/at
2.0K    /var/audit
 14K    /var/backups
4.0K    /var/crash
4.0K    /var/cron
765M    /var/db
2.0K    /var/empty
2.0K    /var/heimdal
 96M    /var/log
 19M    /var/mail
4.0K    /var/msgs
 52K    /var/named
2.0K    /var/preserve
 56K    /var/run
2.0K    /var/rwho
 20K    /var/spool
320K    /var/tmp
 24K    /var/yp
2.0K    /var/games
881M    /var

Где 1 - уровень вложенности.
Читать далее

суббота, 5 ноября 2011 г.

Удаление кеша SVN credentials в *nix

Вчера возникла необходимость передать свою виртуальную машину, с которой я работаю другому работнику. Причина была в том, что у него после ребута посыпалась файловая система. После нескольких попыток реанимации было принято решение об экспорте/импорте моей виртуалки.

Все успешно перенесли, но осталась необходимость сбросить SVN credentials в FreeBSD, чтобы он не комитил под моим именем. Все оказалось достаточно просто, т.к. все креденшелы лежат в папке .subversion/auth/svn.simple. Удаляем нужный файл/запись и все. При следующем операции с репозиторием необходимо будет ввести новые авторизационные данные.
Читать далее