Написание системных утилит на PHP CLI

Для большинства специалистов PHP не является языком, который бы всерьёз использовался для написания консольных утилит, и для этого есть много причин. PHP изначально разрабатывался как язык для создания веб-сайтов, но, начиная с PHP 4.3, в 2002-ом году появилась официальная поддержка режима CLI, поэтому он уже давно перестал быть таковым. Разработчики Badoo на протяжении нескольких лет вполне успешно используют множество интерактивных CLI-утилит на PHP.

В данной статье нам хотелось бы поделиться своим опытом работы с CLI-режимом в PHP и дать несколько рекомендаций тем, кто собирается писать скрипты на PHP, при условии, что они будут запускаться в *nix-системе (впрочем, почти всё верно и для Windows).

Рекомендации

Скорость работы

Распространено мнение, что PHP — язык медленный, и таковым он является на самом деле. Для PHP CLI рекомендуется не использовать тяжелые фреймворки и даже просто большие библиотеки на PHP по двум причинам:

  1. Время работы include/require в CLI-режиме будет всегда включать в себя парсинг и исполнение, т.к. байткод в этом режиме не кэшируется (по крайней мере — по умолчанию), а значит, инициализация займет много времени, даже если из-под веб-сервера всё работает достаточно быстро.
  2. Пользователи веб-сайтов привыкли ждать некоторое количество времени для загрузки страницы (около 1-ой секунды, а иногда и чуть больше пользователем воспринимается вполне нормально), а вот сказать то же самое про CLI нельзя: даже задержка в 100 мс уже будет ощутимой, а в 1-у секунду и более может раздражать.

Читать

Удобная работа в Bash

Тут  приведены  некоторые  полезные  хитрости,  направленные  на более
   удобное  использование  командной  строки.  Все  мы  не хотим повторно
   набирать  какую-то  длинную  команду  и  ищем ее в истории. Тут – пара
   трюков от том, как можно энто самое удобство малость повысить.

1. Потеря комманд в .history

   Многие  пользуются  стандартными  гномовским  или  кдешным эмуляторами
   терминала.  У  них  есть  возможность открывать в одном окне несколько
   оболочек – каждую в отдельной вкладке.

   bash  по  умолчанию  пишет в историю набранные за сеанс команды только
   при  своем  закрытии  (перед  самоликвидацией).  Поэтому  при открытии
   нового  терминала  в другой вкладке вы не увидите только что набранные
   команды из первой вкладки – они еще не записаны в хистори.

   К  тому  же  закрыв  первый  терминал,  а потом второй вы не найдете в
   истории  команд  набранных в первом терминале. Потому что по умолчанию
   bash не дописывает файл .history, а переписывает.

   Исправить  ситуацию  можно,  дописав в конфигурационный файл ~/.bashrc
   пару строк

        shopt -s histappend
        PROMPT_COMMAND=’history -a’

   Теперь  каждая  введенная  вами команда будет писаться в историю сразу
   же. Не бойтесь – дырку на жестком месте такая конфигурация не протрет.
   Не  так  уж  часто  вы  команды  в  баше набираете. 🙂 Да и слава богу
   кеширование дисков пока еще рулит.

Читать

Синхронизация двух серверов Apache + MySQL на FreeBSD

В данном обзоре я расскажу о реализации кластера состоящего из двух нод с резервированием популярной связки для веб сервера Apache + MySQL + FreeBSD (или любой Linux).

Коротко о серверах. В каждом сервере находится по две сетевые карты. Одной они подключены — к свитчу, между вторыми короткий патчкорд, чтобы не нагружать наш свитч лишним трафиком.
Соответственно два сетевых интерфейса em0 – для внешки, rl0 – для репликации.
На первом сервере для интерфейса rl0 ставим IP 192.168.0.1 на втором 192.168.0.2.

Читать

Диагностика неисправностей блока питания с помощью мультиметра

Недавно понадобилось произвести диагностику питания, для того чтобы понять по какой причине не запускается машина. К сожалению, в интернете оказалось мало годных статей на эту тему, поэтому пришлось самому лезть в даташиты.
Эта статья является выжимкой из моих изысканий и надеюсь поможет кому-нибудь, когда им придется заниматься тем же самым.

Дисклеймер номер раз: Данная статья относится только к обычным блокам питания стандарта ATX, она не относится к проприетарным стандартам блоков (например как у старыx рабочиx станциях DELL или SUN), использующим другую распиновку ATX-коннектора. Внимательно сверьтесь со схемой и убедитесь в том, что ваш блок питания является стандартным прежде чем проводить диагностику, во избежании причинения вреда вашему компьютеру.

Дисклеймер номер два: Вы должны понимать что вы делаете и соблюдать технику безопасности, в том числе электростатической (в т.ч. работать в антистатическом браслете). Автор не несет ответственности за порчу оборудования или вред здоровью вследствие несоблюдения или незнания техники безопасности и принципов работы устройства.

Читать

Debian Server для новичка

Как-то обеспокоился наличием собственного FTP-сервака. Тем более под это дело «на помойку» был отдан комп этак десятилетней давности. Так как я человек хоть и виндовый, но начинал с чистого ДОСа (про книжки тов. Фигурнова кто помнит?), то я решил сделать все на линуксе. В линуксе я был ноль полный. Еще и усложнил задачу — только консоль, никаких исков (как же — это ж линукс). Дистрибутивом был выбран Debian. Так получилось, что надобность в 2Тб личном хранилице отпала через год и комп был отдан в хорошие руки, а хард пристроен в нужное место. Но был накоплен неплохой опыт стопроцентного новичка. Какие только глупые ошибки я не совершал поначалу! И хабр читал, между прочим, пока разбирался с проблемами. Поэтому эту свою дебютную (первую) статью на хабре я посвящаю тем, кто хочет заняться линуксом с нуля и эта статья призвана для плавного ввода «в тему», являясь, по сути, фильтрацией и систематизацией всего того, что я нашел на просторах интернета. Ранее я этот материал уже публиковал, но, думаю, на хабре он тоже будет полезен.

Что и как хотим получить в результате:
— консольная установка ОС с флешки;
— навыки консольного управление;
— создание собственного репозитория;
— обеспечение удаленного доступа по протоколу FTP/SFTP;
— обеспечение удаленного управления по протоколу SSH;
— дистанционное включение сервера, находящегося за маршрутизатором;
— создание условий работы веб-сервера (в идеале связка nginx+apache).

Читать

testdisk – восстановление таблицы разделов диска

UPD: картинки сделаю позже

Неожиданно пропали разделы диска? Были уничтожены в результате ошибки? Не паникуйте – есть выход.
Программа testdisk позволяет восстановить поврежденную или уничтоженную таблицу разделов жесткого диска. Поддерживает большое количество файловых систем, в том числе linux ext2, reiserfs и др., а также файловые системы Windows (ntfs, fat32). Если после какой-то ошибки, у вас “пропали” разделы диска, не стоит паниковать – программа testdisk может помочь. Проверено автором man-linux.ru, на собственном опыте.

Итак, у вас пропали разделы жесткого диска. Или вы удалили их сами (например случайно), главное что вы не стирали данные, не форматировали разделы, а просто удалили их.
Не паникуйте – ваши файлы в абсолютной целости и пока вы не начали делать каких-то манипуляций с жестким диском – в сохранности. Удалена лишь информация о разделах из таблицы разделов жесткого диска. Это как ссылка на файл – без ссылки файл вроде есть, а доступа к нему нет, потому-что адрес его неизвестен.

Читать

Оптимизация WEB сервера

Намба 1: Ресурсы

У любого веб-проекта, и особенно у стартапа, всегда есть резкие наплывы посещамости, вызванные разными причинами — публикация статьи на крупном ресурсе (например, на Хабре), пресс-релиз, рекламная кампания, неожиданное упоминание в новостях, итд. Часто (как в последнем примере) всплеск посещаемости происходит ВНЕЗАПНО™.

Это подталкивает к важному выводу — поместить ресурс с посещаемостью в 100к уников в день на начальном VPS за 200 рублей, конечно, можно. Это будет большой повод для гордости в кругу друзей-гиков, однако, скорее всего, приведет к падению сайта в самый ответственный момент. Вообще, хорошо, когда веб-продакшн система работает в обычном режиме не более чем на 10% от ее мощности. Это позволит ей выстоять в момент всплеска посещаемости. Исходя из всего этого, даже такой «легкий» сайт как Шортики лучше поставить на сервер с приличным запасом мощности.

Читать

Самое необходимое о модулях ядра в Linux

Ядро — это та часть операционной системы, работа которой полностью скрыта от пользователя, т. к. пользователь с ним не работает напрямую: пользователь работает с программами. Но, тем не менее, без ядра невозможна работа ни одной программы, т.е. они без ядра бесполезны. Этот механизм чем-то напоминает отношения официанта и клиента: работа хорошего официанта должна быть практически не заметна для клиента, но без официанта клиент не сможет передать заказ повару, и этот заказ не будет доставлен.
В Linux ядро монолитное, т.е. все его драйвера и подсистемы работают в своем адресном пространстве, отделенном от пользовательского. Сам термин «монолит» говорит о том, что в ядре сконцентрировано всё, и, по логике, ничего не может в него добавляться или удаляться. В случае с ядром Linux — это правда лишь отчасти: ядро Linux может работать в таком режиме, однако, в подавляющем большинстве сборок возможна модификация части кода ядра без его перекомпиляции, и даже без его выгрузки. Это достигается путем загрузки и выгрузки некоторых частей ядра, которые называются модулями. Чаще всего в процессе работы необходимо подключать модули драйверов устройств, поддержки криптографических алгоритмов, сетевых средств, и, чтобы уметь это правильно делать, нужно разбираться в строении ядра и уметь правильно работать с его модулями. Об этом и пойдет речь в этой статье.

Читать

Как устроена консоль в Xen’е

В статье разбирается принцип работы xvc0 как с точки зрения domU, так и с точки зрения dom0, а так же описывается, что с этой консолью делают дальше.
Сразу предупреждаю, топик интересен только тем, кто с Xen’ом плотно работает.

Консоль с точки зрения Xen’a

Консоль и XenStore — два устройства в виртуальной машине, которые не анонсируются через XenStore, а пишутся в святую святых — start info page домена. Штатным механизмом для всех остальных устройств является их анонс в XenStore. Понятно, что анонсировать XenStore в XenStore несколько неудобно, так что это устройство «должно быть с самого начала».

Консоль можно было бы поместить в список «обычных» устройств. Но его вынесли в особый класс и сделали «равным XenStore» ради удобства отладки и диагностики. Чем раньше ядро сможет писать на консоль (и мы сможем это читать), тем больше вероятность, что информации на консоли будет достаточно для определения причины поломки.

Читать

Как продлить триал Windows 7 до 120 дней

Думаю, что все уже и так в курсе, что для «семерки» уже есть отлично работающие кряки активации, использовав которые можно снять 30-дневное ограничение на ее работу. Но ведь есть же люди, которые испытывают буквально аллергию на все пиратское и крякнутое. Вот как раз для них и будет интересна информация, которую нарыли товарищи с сайта howtogeek.com.

Для того, чтобы продлить срок работы на следующие 30 дней достаточно запустить командную строку и набрать команду

slmgr -rearm

Что в итоге, после перезагрузки, обнулит счетчик до первоначального, 30-дневного состояния. Повторять операцию можно три раза. Что в сумме даст 120 дней «безкрякового» использования Windows 7.

via lifehacker