среда, 13 ноября 2013 г.

Срочно выйти из сна - headshot.php

В фильме Inception чтобы досрочно выйти из сна, нужно было умереть. Иногда подобная необходимость бывает и на сервере, когда нужно быстро прибить все запущенные запросы, а админского доступа нет.

Этот скрипт, будучи запущенным из браузера на сервере должен сделать эту работу

$ cat headshot.php
<?php
system('PHP_PPID=`ps -p $$ -o ppid=`; PHP_NAME=`ps -p $PHP_PPID -o comm=`; pkill -u `id -un` $PHP_NAME');

Почему не просто pkill -u `id -un`? Потому что имени пользователя под которым работают скрипты на сервере, может быть запущено много чего другого, которое не стоит убивать.

Протестируйте свою WHM/cPanel после обновления до 11.40

На прошлой неделе вышло обновление WHM/cPanel до версии 11.40. С этим обновлением связаны две проблемы, которые мне пришлось решать в понедельник, возможно сей пост кому-то сэкономит время.

У нас есть самописный плагин для cPanel, который автоматизирует установку и конфигурирование сайтов на основе magento для отдела QA. И после обновления этот плагин прекратил нормально работать.

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

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

Попробовал пересобрать конфигурацию веб-сервера

# /scripts/rebuildhttpdconf

Но в ответ выдает ругань вида

[Mon Nov 11 10:31:36 2013] [crit] (EAI 9)Address family for hostname not supported: alloc_listener: failed to set up sockaddr for ::

Configuration problem detected on line 170 of file /usr/local/apache/conf/httpd.conf.work.PsABU7IkikfQtoi0:     Listen setup failed

        --- /usr/local/apache/conf/httpd.conf.work.PsABU7IkikfQtoi0 ---

Ругается на ipv6 опцию и конфиг сервера не перезагружается. В новом релизе появилась поддержка IPv6 и следовательно, где-то нужно дать пинка, чтобы заработало. Немного пробежавшись по форумам cpanel нашел, что нужно просто пересобрать текущую конфигурацию в EasyApache.

# /scripts/easyapache

После завершения сборки все начинает работать.

понедельник, 11 ноября 2013 г.

Уменьшение разряда батареи при использовании Suspend-to-RAM

Мне нравится использовать suspend to ram (STR или S3 в терминологии ACPI) на ноутбуке. Помимо быстрого выхода из режима сна это самый надежный способ заблокировать экран и клавиатуру ноутбука от детей. Есть лишь один недостаток - постоянный разряд батареи, связанный с поддержанием работы оперативной памяти. Если батарея разрядится, то все несохраненные данные будут потеряны.

Для защиты от потери данных в режиме STR в linux есть режим гибридного сна (suspend-hybrid) - в этом режиме состояние памяти сохраняется на диск, как при hibernate (suspend to disk или S4 в терминологии ACPI), но вместо отключения питания система переходит в состояние S3 или suspend to ram. В этом случае при достаточном заряде батареи система мгновенно просыпается как из suspend to ram, а если батарея разрядится, то как из suspend to disk. Все хорошо, но одно НО - батарея все равно разряжается, когда ноутбук находится в режиме такого сна. Это может быть критично в поездке или когда ноутбук длительное время не используется. Поскольку сохранность данных и постоянная готовность ноутбука к работе для меня важнее скорости загрузки, то я перешел на использование hibernate и пользовался им в течении нескольких лет.

Пару дней назад я натолкнулся на элегантное решение проблемы - переключение из режима S3 в S4 без участия пользователя. Кажется я такое уже наблюдал в Windows 7, но не придавал этому значения. Оказывается все очень просто. В процессе подготовки к suspend to ram менеждер питания выполняет установку системного таймера (будильника в BIOS), который включит систему через определенное время. Затем система выполняет обычную подготовку и переходит в режим S3. Далее два варианта:
  • если пользователь включит систему до срабатывания системного будильника, то система пробуждается из режима S3 и переходит в режим нормальной работы;
  • если будильник срабатывает в режиме сна, то система загружается, определяет что пробуждение не было инициировано пользователем (система включилась по событию таймера в BIOS) и сразу же выполняется переход в режим S4 (suspend to disk).
Интервал, после которого система переходит из одного состояния в другое настраивается. Этой схемой я пользуюсь уже несколько дней и проблем пока не замечал.