понедельник, 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

Читать далее

пятница, 19 декабря 2014 г.

tail: Отображение данных, находящихся в конце нескольких файлов

Мы знаем о применении утилиты tail для отображения данных, находящихся в конце файла:
$ tail - f system.log

Но ее можно использовать для нескольких файлов:
$ tail - f *.log

В этом случае утилита показывает название файла и текст, который был туда записан.
Читать далее

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

Magento: Как очистить DB Connections при форке процесса

На данный момент работаю над интеграцией Gearman в Magento. Для создания child-процессов использую PCNTL PHP extension. Все шло гладко, но при тестировании я столкнулся с ошибкой "SQLSTATE[HY000]: General error: 2006 MySQL server has gone away". Проблема в том что при инициализации Magento приложения DB connections кешируются в Mage_Core_Model_Resource::$_connections и будут использоваться для всех форков родительского скрипта. Решение проблемы очень простое –– в дочернем скрипте необходимо удалить 'core/resource' из реестра:

/**
 * Reset DB connections for preventing "SQLSTATE[HY000]: General error: 2006 MySQL server has gone away"
 *
 * @return $this
 */
protected function _resetDbConnections()
{
    Mage::unregister('_singleton/core/resource');
    return $this;
}

Читать далее