Linux запуск приложений в фоне — screen

  1. Вам нужно выполнить sql-запрос, результат которого нужно ждать несколько часов или дней? 
  2. Вам нужно запустить приложение в фоне?
  3. Вам нужно выполнять программу в фоне и иметь возможность к ней вернуться?
  4. Вы используете линукс-консоль и работаете с ssh?

Тогда вам в обязательном порядке нужно знать о screen.

Основы screen

Screen в linux — это как "окна в Windows", которые можно свернуть/развернуть. Вы можете что то делать в одном окне, например смотреть фотографии. Но, если вам нужно кроме просмотра фотографий слушать музыку, то вы откроете новое окно (проводник), зайдёте в каталог с музыкой и отроете песню в аудио-программе.

Когда речь идёт о консоли линукс (особенно при работе по ssh), то нам будет крайне не удобно в одной консоли выполнять различные приложения. А, может, и совсем не удастся выполнять вторую операцию в то время, когда первая ещё продолжает свою работу. Это первый момент. Второй момент заключается в том, что в случае какого-либо сбоя с вашей стороны (со стороны клиента) - текущая операция прервётся. Пара примеров, когда при работе с ssh может понадобиться screen:

  • если вы копируете или перемещаете большой объём файлов с одного каталога в другой
  • если вы выполняете тяжёлый sql-запрос
  • если нужно запустить приложение, которое "захватывает" консоль

Наверное, вам было бы очень грустно, когда из-за случайно-закрытого терминала или скачка напряжения прервался бы sql-запрос, который уже выполнялся более 10 часов. В случае же с screen, screen работает на сервере, инициатором запроса будет объект screen и запрос уже не оборвётся не при каких проблемах клиента. При обрыве связи процессы не останавливаются, а продолжают работать, и к ним можно вернуться в любой момент.

Включить и выключить swap в linux

Swap – раздел подкачки в linux. Свап используется операционной системой при недостаточом количестве оперативной памяти. Т.е. вместо записи данных в оперативную память, если она практически вся заполнена, данные помещаются на жёсткий диск (свап-раздел). При этом производительность сервера как правило падает (по крайней мере если жёсткий диск не SSD) по причине того, что работа с оперативной памятью происходит гораздо быстрее записи/считывания с жёсткого диска, на котором и располагается файл подкачки (Swap).

Для выключения swap в linux (Ubuntu) без перезагрузки системы воспользоваться командой:

sudo swapoff -a

Затем включить swap:

sudo swapon -a

MySQL - изменение полей, структуры таблицы

Mysql alter add/drop index (добавление и удаление индексов):

ALTER TABLE sites 
  DROP INDEX keyname;

// эквивалентно DROP INDEX
ALTER TABLE sites 
  DROP KEY keyname;

ALTER TABLE categories
  DROP PRIMARY KEY,
  ADD  PRIMARY KEY (`site_id`,`category_id`);

 

Определяем язык текста с помощью cld2+python+php

cld2 (Compact Language Detection) — библиотека от компании google, написанная на С. Как заявляет google, со второй версии она стала быстрее и детектит большее количество языков. Библиотека может задетектить более 80 языков. Определяет до 3-х языков, использованных в тексте. Например, 800 байт - английский, 200 байт - французский и т.д.

Библиотека cld2 используется в популярном браузере Chrome (Chromium) для определения языка, с которого нужно перевести сайт.

Для определения языка по входной строке нам понадобится: cld2, python, php для удобства.

Размытие изображения на php c помощью imagick

Для размытия изображение с помощью средств php можно воспользоваться библиотекой Imagick. Для этого на изображение нужно наложить фильтр. В Imagick есть две подходящих функции для этого:

  • blurImage;
  • adaptiveblurimage.

Я проводил испытания, по которым blurImage показала производительность в 20-50 раз выше чем adaptiveblurimage на картинках размером 1000px на 1000px. На картинках до 200px разницы в проиводительности не почувствовал. Также не заметил особых изменений в качестве картинки при использовании обех функций. Поэтому остановился на blurImage.  Код, размывающий картинку, и сохраняющий её по новому пути:

$magic = new Imagick();
$magic->readimage('image.png');
$magic->blurImage(0, 9);
$magic->writeimage('path_to_save.png');

 

PhpStorm - используем регулярные выражения для правок кода

Учимся использовать регулярные выражения для исправления кода в PhpStorm.

Одну библиотеку, которую я писал, которая была покрыта тестами почти на 100% подверглась рефакторингу (оптимизации). Как результат, 450 тестов сигнатур, (450 юнит тестов!!!), которые раньше проходили на "УРА", стали падать. Изменения затронули только пару абстрактных классов, но тесты были явно привязаны к старому функционалу. Чтобы тесты снова заработали, нужно было исправить 450 php файлов c тестами.

После исправления 10-20 классов ручками, я понял, что ручками это делать будет очень-очень долго и мозго-выносяще.

На помощь пришли регулярные выражения. Сначала я подбирал паттерн поиска в PHPStorm (Ctrl+Shift+F), искал, и оценивал те ли результаты я ожидал найти, а затем (Ctrl+Shift+R) выполнял замену. Конечно, после замены отступы в коде не соответствовали правильному code style. Но Code -> Reformat Code ... в PHPstorm быстро всё поправил.

Некоторые регулярные выражения простые, а некоторые с первого взгляда суровые:

(\/\*\*[^/]*\*\/)?\s*(protected|private) function getSignature\(\)\s*\{[^}]*\}[^}]*}

 

Игорь Сысоев разработчик Nginx видео

Видео с доклада Игоря Сысоева на конференции DevPoint.ru в ноябре 2010.

Игорь Сысоев Nginx

phpunit тестирование приватных методов, все типы assert`ов в phpunit

phpunit

Рассмотрим процесс тестирования приватного метода класса с передачей в него параметров. Пусть наш тестируемый класс выглядит так:

Class MyClass()
{
    private myPrivateMethod($param1, $param2)
    {
        return $param1 * $param2;
    }
}

Тогда тест приватного метода будет такой:

class MyClassTest extends PHPUnit_Extensions_Database_TestCase 
{
    public function testMyPrivateMethod()
    {
        $class = new ReflectionClass('MyClass');
        $method = $class->getMethod('myPrivateMethod');
        $method->setAccessible(true);
        $obj = new MyClass();

        $result = $method->invoke($obj, 2, 10);
        $this->assertEquals(20, $result);

        $result = $method->invoke($obj, 2, 0);
        $this->assertEquals(0, $result);
    }
}

 

Настроить автоматическую загрузку демонов при старте Ubuntu - rcconf

Что такое демон? И чем демоны отличаются от сервисов services (служб, процессов)? Ответ - ничем не отличаются.

Демон (Daemon) — UNIX-служба или просто программа, работающая в фоновом режиме без прямого общения с пользователем. Демоны обычно запускаются во время загрузки системы. В техническом смысле демоном считается процесс, который не имеет управляющего терминала. Чаще всего (но не обязательно) предком демона является init — корневой процесс UNIX.

Исторически, демоны пошли из UNIX-подобных систем. А в ОС семейства Windows - это так называемые службы (Windows services), те самые, которые мы видим в диспетчере задач Windows. Иногда их неофициально называют демонами. Впрочем, и наоборот тоже.

Программа rcconf позволяет настроить запуск демонов: демоны, которые должны стартовать при загрузке системы и демоны, которые должны сидеть и ждать. Это самый простой способ добавлять/удалять службы с автозапуска в Linux.

Программа имеет простой консольный интерфейс и должна запускаться с правами root'а.

rcconf - настраиваем автозагрузку служб в linux

Читать дальше

Установка sphinx на linux. Индексация и поиск.

Статья вводная, будет полезна новичкам, которые впервые хотят установить сфинкс, индексировать и искать контент, или тем, кто имеет небольшой опыт работы с sphinx.

Что такое sphinx?

Сфинкc — это бесплатный полнотекстовый поисковый движок, написанный на C++. С быстрой индексацией документов, стоп-словами, умеет интегрироваться с самыми известными БД: Mysql, MsSql, Oracle и тд, также имеет АПИ с популярными языками программирования PHP, Perl, Java и т.д. И! Имеет поддержку SQL синтаксиса.

Установка sphinx

sudo apt-get install sphinxsearch
НОВЫЕ ПОЛЬЗОВАТЕЛИ