Systemd Status P7

Материал из ALT Linux Wiki

Легенда к таблице

Поле "Сервис"

  • имя пакета, в котором имеется rc-скрипт

Поле "Service(unit)"

  • если в поле стоит Symbol oppose vote.svg : unit-файл отсутствует, в противном случае перечислены имена unit-файлов

Поле "socket"

  • пустое: активация по сокету не целесообразно и не доступно
  • имеет значение Symbol oppose vote.svg : целесообразно добавить поддержку активации по запросу к сервису
  • записано имя .socket юнита: активация по запросу имеется и используется

Поле "Комментарии"

  • если в поле стоит Symbol oppose vote.svg : сервис на данный момент работает не корректно с systemd
  • комментарии к созданию unit-файла/сопутствующих файлов и сопутствующая информация

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

  • по возможности используйте метод запуска simple/dbus. Если у сервиса имеется режим работы foreground с включённым debug, лучше написать простой патч, который добавляет новую опцию запуска, без включения debug (как, например, реализовано в openntpd)
  • если можно использовать socket-активацию - используйте. Часть сервисов не нужны непосредственно во время запуска системы или сразу после окончания загрузки (например: CUPS, alteratord, alterator-fbi)
  • имена для unit-файлов должны совпадать с таковыми именами сервиса в /etc/init.d (не учитывая расширение): /etc/init.d/smb -> smb.service, lm_sensors3 -> lm_sensors3.service. Иначе systemd будет считать unit и rc-скрипт как два разных сервиса. Если имена файлов различаются, должен быть симлинк с именем аналогичным имени сервиса в /etc/init.d (не учитывая расширение): /etc/init.d/bluetoothd - bluetooth.service(без "d" вконце) -> bluetoothd.service
  • не используйте жесткие зависимости, типа Require, только если такой тип зависимости действительно нужен
  • нельзя запаковывать в unit запуск rc-скрипта
  • старайтесь следовать правилу: unit поставляемый из "коробки" обеспечивает дефолтный запуск сервиса, все отличные варианты запуска обеспечиваются самим пользователем, перенеся unit в /etc/systemd/system и изменив по желанию. Соответственно не надо в дефолтном юните обеспечивать все возможные варианты запуска
  • для передачи второстепенных параметров при запуске сервиса, используйте директиву EnvironmentFile или Environment
  • в spec-файле используйте директиву %_unitdir
  • все вопросы можно задать в devel@

Текущее состояние основных компонентов

Сервис service(unit) socket Комментарии
389-Fedora-DS Symbol oppose vote.svg 
acct Symbol oppose vote.svg 
acpid acpid.service
alterator Symbol oppose vote.svg  Symbol oppose vote.svg 
anacron Symbol oppose vote.svg  Type=oneshot; в юнит прописать настройки на CPULimit и IOLimit
atftp Symbol oppose vote.svg  не запакованы файлы из /var/run (tmpfiles.d)
apache-base Symbol oppose vote.svg 
apache2 httpd2.service Проблема собственно не в systemd.

Рассказываю методологию: 1)Добавляю в /usr/sbin/apachectl2 в секцию start() в самом начале "sleep 10", а так же модифицирую заголовок в "#!/bin/sh -x", что бы отследить в логах ход выполнения скрипта. 2)При загрузке обнаруживается, что poststart() обнаруживает успешный запуск службы и создает lock-файл только на последней итерации цикла. 3)Количество проходов этого самого цикла определяет $LOOPSSTART, который можно настроить в /etc/sysconfig/httpd2. В дефолтном варианте параметр задает 10 проходов. 4)Убираем слип, $LOOPSSTART увеличиваем до 100, перезагружаемся и видим: ... окт 11 22:30:32 media.localdomain _apachectl2[4290]: + usleep 300000 окт 11 22:30:32 media.localdomain _apachectl2[4290]: + briefstatus окт 11 22:30:32 media.localdomain _apachectl2[4290]: + RETVAL=3 окт 11 22:30:32 media.localdomain _apachectl2[4290]: + (( i=((89-1)) )) окт 11 22:30:32 media.localdomain _apachectl2[4290]: + (( 88>0 )) окт 11 22:30:32 media.localdomain _apachectl2[4290]: + usleep 300000 окт 11 22:30:33 media.localdomain _apachectl2[4290]: + briefstatus окт 11 22:30:33 media.localdomain _apachectl2[4290]: + touch /var/lock/subsys/httpd2 окт 11 22:30:33 media.localdomain _apachectl2[4290]: + RETVAL=0 окт 11 22:30:33 media.localdomain _apachectl2[4290]: + break окт 11 22:30:33 media.localdomain _apachectl2[4290]: + return 0 То есть для нормального старта не хватает совсем чуть-чуть, как бы 12 проходов вместо 10.

Говорить твердо о причинах такого необычно долгого старта я не берусь, но есть 2 предположения: 1)За время старта апача успевает инициализироваться только "systemd[1]: Starting Console Manager...", да и то, она отрабатывает раньше заходов в цикл вообще, что не должно влиять, даже если бы этот демон был зависимостью для апача. 2)В этот момент времени параллельно отрабатывает prefdm, запускающий иксы и при этом сильно нагружающий систему. Надо пологать, что им просто на двоих не хватает "мегагерцофф", что бы стартануть за 10 проходов цикла, а за 12 успевает.

Решение: Предлагаю увеличить в /etc/sysconfig/httpd2 дефолтное значение $LOOPSSTART. На нормальных режимах работы это не вызовет увеличения времени запуска и остановки службы, а на относительно слабых и\или загруженных машинах позволит демону успевать стартовать.

apache2-cache clean Symbol oppose vote.svg  rc-скрипт не корректный: не верная директива pidfile
autofs Symbol oppose vote.svg 
audit Symbol oppose vote.svg 
arpwatch Symbol oppose vote.svg 
Avahi avahi-daemon.service avahi-daemon.socket
bacula-(client,director,etc) Symbol oppose vote.svg  Symbol oppose vote.svg  не создаются нужные файлы в /var/run
bind Symbol oppose vote.svg 
bluez bluetooth.service
blcr Symbol oppose vote.svg  Symbol oppose vote.svg  зачем нужен сервис, если для него нет модулей ядра в репозитории, т.е. сервис заранее не рабочий.
bridge-utils Symbol oppose vote.svg  Type=oneshot
conserver Symbol oppose vote.svg  - Type=simple (без -d), подумать как реализовать запуск по запросу
console-scripts (consolesaver) Symbol oppose vote.svg  Type=oneshot; подумать, что делать с keytable
collectd Symbol oppose vote.svg  Symbol oppose vote.svg  rc-скрипт не корректный: не верная директива pidfile
crond crond.service
cryptsetup + используется генеретор unit файлов из состава systemd
CUPS cups.service cups.socket полная поддержка; запуск по требованию; добавить в юнит Wants на avahi-daemon.socket (или .service)
dhcp-server (dhcpd) Symbol oppose vote.svg 
dnsmasq Symbol oppose vote.svg  Type=simple (запуск с параметром -k); Файл rc-скрипт большой, необходимо при написании юнита правильно разбить на части
dovecot dovecot.service dovecot.socket ошибка в скрипте настройки (не относится к systemd); запуск по требованию
ebtables Symbol oppose vote.svg  Type=oneshot, подумать как реализовать аналог "service ebtables save"
etcnet Symbol oppose vote.svg  большой скрипт, подумать как перенести на systemd (сейчас в systemd отрабатывается вызовом /etc/init.d/network)
ethtool Symbol oppose vote.svg  Type=oneshot (данный сервис вообще нужен?)
freeipmi-bmc-watchdog (bmc-watchdog) Symbol oppose vote.svg  Type=simple, правильно написать юнит, что бы не конфликтовать с настройками для sysvinit, т.к. /etc/sysconfig/bmc-watchdog - общий
freenx-server Symbol oppose vote.svg  Type=forking, при написании юнита использовать опции сервера --stop, --start, etc.
ganeti Symbol oppose vote.svg 
ganglia-gmetad Symbol oppose vote.svg  Type=forking (или пропатчить для отключения "демонизации" )
ganglia-gmond Symbol oppose vote.svg  Type=simple; на данный момент падает с сообщением "stack smashing detected"
greylistd Symbol oppose vote.svg  Type=simple
gpm Symbol oppose vote.svg 
hddtemp Symbol oppose vote.svg  Symbol oppose vote.svg  rc-скрипт не корректный: указан путь в директиве pidfile, но файл по пути не создаётся; сервис пытается получить температуру с CDROM - "прилипает" к sr0
heartbeat Symbol oppose vote.svg  необходимо запаковать каталоги в /var/run/heartbeat (tmpfiles.d). Возможно пропатчить ldirectord для отключения "демонизации". На данный момент ldirectord не работает, вылетает с ошибкой: Can't locate LWP/UserAgent.pm in @INC. Symbol oppose vote.svg 
ifplugd Symbol oppose vote.svg  Type=forking; Возможно пропатчить для отключения "демонизации"
ipsec-tools (racoon) Symbol oppose vote.svg  Type=simple (опция -F)
iptables/iptables-ipv6 Symbol oppose vote.svg  Type=oneshot; продумать как реализовать аналог service save
klogd Symbol oppose vote.svg  journald умеет читать "ядрённые" логи без помощи klogd. Возможно стоит отказаться от klogd
Krb5 kadmin.service, kprop.service, krb5kdc.service ? желательно изменить kprop.service на режим работы, аналогичному inetd (см. sshd@.service);krb5kdc.service прибито расположение PID файла, хотя в строке запуска используется переменная описанная в sysconfig/krb5kdc - надо поправить
libkrb5 Symbol oppose vote.svg  Type=oneshot
lm_sensors3 Symbol oppose vote.svg  Type=oneshot
maui Symbol oppose vote.svg  Type=forking (можно пропатчить для отключения "демонизации"). Правильно, что pid-файл находится в /var/spool/maui/ ??
mdadm mdadm.service
microcode_ctl Symbol oppose vote.svg  Оно вообще надо??
monit Symbol oppose vote.svg  Type=simple (опция -I). Проверить, что monit будет корректно перезапускать сервисы при работающем systemd
multipath-tools Symbol oppose vote.svg  Type=simple (опция -d)
MySQL Symbol oppose vote.svg 
NetworkManager Networkmanager.service, NetworkManager-wait-online.service
nginx nginx.service можно запускать с "daemon=off", правда тогда надо подумать о разделении конфигов(nginx -g 'daemon off;')
NFS Lock nfslock.service Symbol oppose vote.svg  не запускается, сообщает об ошибке
nss-ldapd nslcd.service Symbol oppose vote.svg 
ntpd Symbol oppose vote.svg  продумать правильную реализацию юнита (chroot, ntpdate)
ocfs2-tools Symbol oppose vote.svg  необходимо запаковать каталог /var/run/o2cb (tmpfiles.d). Между двумя юнитами требуется правильно расставить зависимости
openntpd ntpd.service немного подправить директиву EnvironmentFile в юните (можно его заставить "говорить" в лог меньше?)
openldap slapd.service ? можно обсудить вопрос об использовании чрута средствами systemd
openvpn Symbol oppose vote.svg  необходимо запаковать директорию /var/run/openvpn
p0f Symbol oppose vote.svg  Type=simple (без опции -d)
php5-fpm-fcgi php5-fpm.service Type=simple (--nodaemonize)
policycoreutils-mcstransd Symbol oppose vote.svg  Symbol oppose vote.svg  Type=simple (параметр -f); rc-скрипт не корректный: указан путь в директиве pidfile, но файл по пути не создаётся
policycoreutils-restorecond Symbol oppose vote.svg  Type=forking (можно пропатчить для отключения "демонизации")
postfix Symbol oppose vote.svg 
postgresql Symbol oppose vote.svg  ? с ldv@ обсуждалось, необходимо переписывать скрипты запуска, как sysv, так и писать правильный юнит-файл
pptpd Symbol oppose vote.svg  Type=simple (опция -f)
qemu-kvm-el Symbol oppose vote.svg  Type=oneshot; в rc-файле указана директива pidfile, хотя она не нужна
redis redis.service
runawfe-botstation Symbol oppose vote.svg  rc-файл не корректный, не совпадают параметры: pidfile и PIDFILE
samba smbd.service, nmbd.service ? необходимо изменить unit-файл и поменять тип запуска сервиса на "simple"
scanlogd Symbol oppose vote.svg  Общее: PID не создаётся, приложение не проверяет на наличие уже запущенной копии
sphinx searchd.service ?
smartd smartd.service
slurm-master Symbol oppose vote.svg  Type=forking (можно пропатчить для отключения "демонизации")
slurm-slave Symbol oppose vote.svg  Type=simple (опция -D)
slurm-slurmdbd Symbol oppose vote.svg  Type=forking (можно пропатчить для отключения "демонизации")
spamd Symbol oppose vote.svg  ? Symbol oppose vote.svg  не создаются нужные файлы в /var/run
spawn-fcgi Symbol oppose vote.svg  Symbol oppose vote.svg  необходимо запаковать каталог /var/run/spawn-fcgi (tmpfiles.d); rc-файл не корректный, не совпадают параметры: pidfile и PIDFILE
spice-vdagent spice-vdagentd.service - изменить тип запуска с forking на simple и прописать в ExecStart ключ "-x"
squid squid.service ?
squidmill Symbol oppose vote.svg  Type=forking (можно пропатчить для отключения "демонизации")
sshd sshd.service
sysfsutils Symbol oppose vote.svg  Type=oneshot (оно надо сейчас?)
sysstat Symbol oppose vote.svg  Type=oneshot
syslogd Symbol oppose vote.svg  Symbol oppose vote.svg  Symbol oppose vote.svg  проблемы с reload, https://bugzilla.altlinux.org/show_bug.cgi?id=27868
torque-mom Symbol oppose vote.svg  PID файл находится в /var/spool/torque/mom_priv/ - это правильно? Type=forking (можно пропатчить для отключения "демонизации")
torque-scheduler Symbol oppose vote.svg  PID файл находится в /var/spool/torque/scheduler_priv/ - это правильно? Type=forking
torque-server Symbol oppose vote.svg  PID файл находится в /var/spool/torque/server_priv/ - это правильно? Type=forking (можно пропатчить для отключения "демонизации"); rc-скрипт зависает
ulogd Symbol oppose vote.svg  ?
update-wms Symbol oppose vote.svg  Type=oneshot
virtualbox-common Symbol oppose vote.svg  Type=oneshot
vzctl Symbol oppose vote.svg  Type=oneshot

Собственно пока совместимости OpenVZ и systemd ждать не приходится. Для работы systemd старше версии v33 требуется ядро 2.6.39, а самое свежее ovz ядро на сегодняшний день это 2.6.32. Так что или даунгрейд systemd до v33, что наверное сильно поломает систему или использовать sysvinit. 03/10/2014

wpa_supplicant Symbol oppose vote.svg  Type=dbus
xCAT-server Symbol oppose vote.svg  Type=forking
xinetd Symbol oppose vote.svg 
zabbix-agent Symbol oppose vote.svg  необходимо запаковать каталог /var/run/zabbix/ (tmpfiles.d); Type=forking

Команда для вычисления списка пакетов, в которых есть init-файлы, но нет unit-файлов

comm -23 <(grep -h '^/etc/rc\.d/init\.d/' /ALT/Sisyphus/*/base/contents_index |cut -f2 |sort -u) <(grep -h '^/lib/systemd/system/' /ALT/Sisyphus/*/base/contents_index |cut -f2 |sort -u)