Сообщение об ошибке

  • Deprecated function: Function create_function() is deprecated в функции _geshifilter_prepare() (строка 126 в файле /var/www/lsoft/sites/all/modules/geshifilter/geshifilter.pages.inc).
  • Deprecated function: Function create_function() is deprecated в функции _geshifilter_prepare() (строка 131 в файле /var/www/lsoft/sites/all/modules/geshifilter/geshifilter.pages.inc).
  • Deprecated function: Function create_function() is deprecated в функции _geshifilter_process() (строка 231 в файле /var/www/lsoft/sites/all/modules/geshifilter/geshifilter.pages.inc).

Прокачка Linux-а стероидами. Systemd.

test

SystemD

SystemD - замена демона инициализации других демонов /sbin/init для Linux (или System V или BSD-style). Разработан для обеспечения лучшего выражения зависимостей между службами, позволяющее делать одновременно больше работы при загрузке системы, и уменьшить время загрузки системы. Название происходит от принятого в Unix добавления суффикса к демонам (фоновым процессам) буквы «d».
Systemd развивают Леннарт Поттеринг, Кей Сиверс и другие разработчики.[3] Опубликована как Свободное программное обеспечение под условиями лицензии GNU Lesser General Public License версии 2.1 или более поздней.(c)Wikipedia

Предисловие

Скучно мне сидеть иногда на экспериментальной ветке Debian GNU\Linux, вот и ищу иногда приключений. Многие считают что система управления процессами SysV срабатывает только при запуске, а потому временем запуска системы дольшим секунд на 30 можно пожертвовать, все-равно ведь каких-то секунд 30 можно и подождать 1-2 раза в день... Я раньше тоже так считал. Но, в общем-то это не только 30+- секунд времени в день, это и скорость запуска, остановки процессов, стабильность их работы, загрузка в память только того что нужно, а не тех программ в чьей надобности Вы сомневаетесь(авось отключите и система не захочет запускаться :-D), да и другие плюшки.

Вот заглянул я в журнал Хакер, pdf-ки которого можно спокойно скачать с их сайта и попался мне такой себе systemd... Но кроме краткого описания ничего не понятно, поставил и забыл это не наше.

Плюшки systemd:

  • Параллельный запуск множества процессов, который в отличии от других систем инициализации базируется на предсоздании соккетов, к которым и подключаются наши демоны. То есть сперва запускаются те что прописаны как required, а их почти нет, а потом все остальные которые должны запуститься, одновременно или почти одновременно, нагружая комп и не давая простаивать ресурсам, как это было при последовательном запуске системой SysV, пока процесс не запустился, все остальные не запускаются.
    От вылетов спасает как-раз таки создаваемость требуемых демонам соккетов, которые сперва по требованию создает systemd, а потом передает управление на запрошенный демон. Те же демоны кому нужно отправлять сообщения в соккет могут это делать, придет дядя ответственный за обработку сообщений соккета и все почитает :-D
  • Скрипты сценариев запуска SysV достаточно медленные за счет того что обрастают кодом и используют множество других утилит, таких как grep, find и прочие. Файлы systemd прозаично коротки, эдак иногда в несколько десятков раз.
  • Для того чтобы писать сценарии запуска SysV нужно достаточно неплохо знать sh-скриптинг, в отличии от файлов systemd.
  • Замечательная плюшка рас! cgroups сортирует ресурсы по полочкам и шкафчикам. Если процесс порождает форк, который в последствии отрекается от родителя, такой процесс можно легко найти. Плюс это дает возможности задавать лимиты процессам.
  • Замечательная плюшка два! systemd может отслеживать и перезапускать упавшие демоны. Да! Не нужен monit с его ручками прописанными конфигами слежения за наличием файла pid, свидетельствующем что процесс не вылетел! Все в этом комбайне, поставил, настроил и юзай.
  • Systemd может монтировать файловые системы при старте и куда еще только свои щупальца не запустил.
  • Планировалось что systemd может отслеживать время и запуска/останавливать/делать_что-то_еще вместо крона.
  • Замечательная плюшка три! Для того чтобы им пользоваться не нужно кучу всего перенастраивать и т.д., в нем работает режим совместимости с сценариями SysV, читает fstab и спокойно работает с привычными нам /etc/init.d/какой-то_демон start/stop
  • Работает с системной шиной D-Bus.

Мне кажется что я что-то забыл еще... Ну да ладно, думаю убедил уже попробовать.

Ставим...

apt-get install systemd
Поставили, теперь ведь нужно чтобы у нас он и грузился, а не наш избитый жизнью и проблемами sysv. Потопали в гугль и попали на вики дебиана где все уже за нас решено:
---------------------------------------------------------

Известные проблемы и способы их решения

Issue #1: sysvinit vs. systemd-sysv
sysvinit является текущей по умолчанию системой инициализации в Debian и помечен как "Essential" пакет. Это означает, что инструменты управления пакетами откажутся удалить или заменить пакет если только не принудительно. Кроме того, при выполнении dist-upgrades основные пакеты станут предпочтительнее и будут вновь установлены . Для получения большей информации см.chapters "3.8 Essential packages" and "5.6.9 Essential"

Пакет systemd-sysv package имеет в составе /sbin/init (как символьную ссылку на /bin/systemd) и следовательно, конфликтует с пакетом sysvinit .

Решение #1: Не устанавливать systemd-sysv, изменить строку grub (Kernel command line) добавлением параметра "init=/bin/systemd". Для grub2 постоянным решением является это (требует выполнения update-grub для обновления /boot/grub/grub.cfg):

# $EDITOR /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet init=/bin/systemd"

# update-grub
-----------------------------------------------------------------------------------

Вуаля... Поставили, можно и загрузиться теперь в систему, посмотреть, а не упала ли.

Вернулись? Значит все работает :-D
Такс... в кратце если...
systemctl - основной инструмент с которым работаем.

Выводим список юнитов:
systemctl
Проверяем статус процесса
systemctl status syslog.service
Запускаем что-то
systemctl start memcached.service

Как вы заметили, к привычным нам записям в /etc/init.d добавилось слово .service. Ниже я дам ссылки где почитать подробнее об сервисах, таргетах и прочем.
Как я уже говорил, система имеет свои файлы с описанием запуска служб в /etc/systemd/system, а те которых не имеет добирает в /etc/init.d и других доступных ей источниках. Приоритет отдается первым в случае их наличия.

Теперь вкратце о самих файлах, чтобы Вы увидели разницу между сценарием запуска SysV и Systemd. Такой вот у меня получился файл с описанием запуска Apache2:
----------------------------------------------------------
/etc/systemd/system/httpd.service
[Unit]
Description=Apache Webserver
After=network.target

[Service]
Type=forking
EnvironmentFile=/etc/apache2/envvars
ExecStart=/usr/sbin/apache2ctl -k start $OPTIONS
ExecStop=/usr/sbin/apache2ctl -k graceful-stop $OPTIONS
ExecReload=/usr/sbin/apache2ctl -k graceful $OPTIONS
Restart=always

[Install]
WantedBy=multi-user.target
----------------------------------------------------------

Как видите, описание, логично понять что After то после чего запускается наш сервис, можно было опустить и он бы спокойно запустился и без этой строки.
ExecStart у нас строка запуска
ExecStop - команда остановки демона
ExecReload - команда перезапуска демона
Restart=always, как-раз таки наша плюшка перезапуска упавшего демона.
Type - метод демонизации, стандартный для linux-а форк процесса.
WantedBy= multi-user.target у нас собственно аналог runlevel многопользовательской системы, в некоторых системах это 3 или 5 уровень. По сути "Обычная загрузка" для непосвященных.
Пример взял достаточно сложный, сам сразу столкнулся с ошибками, так как брал те что были конфиги на Arch
https://wiki.archlinux.org/index.php/Systemd/Services#apache2
Там же можно посмотреть и конфиги на другие демоны. К сожалению родных на Debian я пока не видел. Но если желающих будет больше думаю и конфиги появятся.

Сохраняем файл в /etc/systemd/system с названием apache2.service и выполняем команду:
systemctl daemon-reload
systemctl stop apache2.service
systemctl start apache2.service

Проверяем если выдало ошибки командой systemctl status apache2.service, подскажет почему ошибка и правим.
Все, на этом эта маленькая статейка заканчивается. Надеюсь кому-то помогло.

Теперь все ваши попытки сделать killall -s KILL apache2 будут мучительно долги :-D Systemd перезапустит демон при каждом его падении.

P.S. Да, как и обещал, ссылки чтобы более подробно понять что это, зачем и как работает:
http://wiki.opennet.ru/Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%...
http://tux-the-penguin.blogspot.com/2010/09/systemd.html
http://tux-the-penguin.blogspot.com/2010/09/systemd-ii.html

Для особо отчаянных и желающих почувствовать всю мощь: man systemd

Категория: 
Share/Save

Делитесь с друзьями в социальных сетях! Оставляйте комментарии!

Share/Save

Это Вам так же может быть интересно!