среда, 28 декабря 2011 г.

Systemd

просмотр статуса старта служб#systemctlтам же можно посмотреть какие неудачно стартанули и пофикстить проблемы, например из неудачно стартанувших
systemd-...-setup.service loaded ESC[1;31mfailed failed   ESC[0m     Recreate Volatile Files and Directories
Юниты, завершенные с ошибкой:
systemctl --failed
статус юнита
systemctl status fail2ban
статус всех юнитов (просмотр всех служб (стартуют автоматом или нет) )
systemctl list-unit-files 

если конкретную
systemctl list-unit-files | grep iptables
iptables.service                        enabled

Для сервисов можна использовать
systemstl start {stop,restart,enable,disable,kill(убить)} fail2ban
Например для включения и выключения службы
systemctl disable iptables
rm '/etc/systemd/system/basic.target.wants/iptables.service'
systemctl list-unit-files | grep iptables
iptables.service                        disabled
systemctl enable iptables
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'
systemctl list-unit-files | grep iptables
iptables.service                        enabled
Переход между уровнями
systemstl isolate renlevel3.target
systemstl isolate renlevel5.target
просмотр процессов
ps xawf -eo pid,user,cgroup,args
PID USER     CGROUP                              COMMAND
 9611 root     cpu:/system/prefdm.service;name=systemd:/system/prefdm.service          |   |               \_ su -
 9615 root     cpu:/system/prefdm.service;name=systemd:/system/prefdm.service          |   |                   \_ -bash
 9239 vova     cpu:/system/prefdm.service;name=systemd:/system/prefdm.service          |   \_ /bin/bash
 9377 vova     cpu:/system/prefdm.service;name=systemd:/system/prefdm.service          |   |   \_ ssh ns
 9308 vova     cpu:/system/prefdm.service;name=systemd:/system/prefdm.service          |   \_ /bin/bash
 6962 vova     cpu:/system/prefdm.service;name=systemd:/system/prefdm.service          \_ thunar
 6964 vova     cpu:/system/prefdm.service;name=systemd:/system/prefdm.service          \_ conky
 6965 vova     cpu:/system/prefdm.service;name=systemd:/system/prefdm.service          \_ /opt/google/chrome/chrome
колоночка CGROUP как видим показывает имя контрольной группы , которое systemd присваивает каждому процессу
можно упростить себе работу назначив алиас на данну команду
alias psc='ps xawf -eo pid,user,cgroup,args' 
ту же инфу можно получить командой
#systemd-cgls
как видно например
 ├ auditd.service
  │ └ 1526 auditd
служба auditd.service порождает процесс 1526 auditd
Service-файлы для служб находятся в
ls /lib/systemd/system/*.service /etc/systemd/system/*.service
(аналог /etc/rc.d/init.d)
systemctl daemon-reload - при изменении конфигурации systemd нужно выполнить
systemctl is-enabled foo.service; echo $?
0 - включен, 1 - выключен
ls -la /lib/systemd/system/*.wants/systemd-update-utmp-runlevel.service
по уровнях (аналог chkconfig foobar –list)
Изменение уровня запуска (3 без Х, 5 - с Х)
rm /etc/systemd/system/default.target
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
(3 runlevel по умолчанию)
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
(5 runlevel по умолчанию)
inittab не используется !
просмотреть текущий уровень запуска
systemctl list-units --type=target
как правильно убить службу
systemctl kill crond.service
systemctl kill -s SIGKILL crond.service (если дела плохи)
После ввода этой команды, служба cron будет жестоко убита вместе со всеми ее дочерними процессами, вне зависимости от того, сколько раз она форкалась, и как бы она ни пыталась сбежать из-под нашего контроля при помощи двойного форка или форкбомбардировки. В некоторый случах возникает необходимость отправить сигнал именно основному процессу службы. Например, используя SIGHUP, мы можем заставить демона перечитать файлы конфигурации. Разумеется, передавать HUP вспомогательным процессам в этом случае совершенно необязательно. Для решения подобной задачи неплохо подойдет и классический метод с pid-файлом, однако у systemd и на этот случай есть простое решение, избавляющее вас от необходимости искать нужный файл:
systemctl kill -s HUP --kill-who=main crond.service
После прочтения сказанного выше у вас может возникнуть вопрос: в чем разница между systemctl kill и systemctl stop? Отличие состоит в том, что kill просто
отправляет сигнал заданному процессу, в то время как stop действует по «официально» определенному методу, вызывая команду, определенную в параметре ExecStop
конфигурации службы. Обычно команды stop бывает вполне достаточно для остановки
службы, и к kill приходится прибегать только в крайних случаях, например, когда
служба «зависла» и не реагирует на команды.
Теперь systemd отвечает и за имя хоста, локаль, настройками клавиатуры и т.д.
Имя хоста:
hostnamestl set-hostname my_hostname
Локаль:
localectl set-locale LANG="ru_UA.UTF-8"
Клавиатура (как в иксах так и в локали)
localectl set-keymap ru
Часовой пояс:
timedatectl set-timezone Europe/Kiev
Автомонтирование любого несистемного раздела (в fstab) опцией:
/dev/sda7 /home ext4 noauto,x-systemd.automount 0 1
то есть раздел будет монтирован когда он понадобится (поскольку работает отложенное монтирование)
для LVM разделов есть сервис
systemctl enable lvm 
systemctl enable lvm-on-crypt 
Настройка питания (демон logind) можно сделать без acpid, pm-utils.
Пример - спящий режим после нажатия кнопки "Power"
HandlePowerKey=suspend (/etc/systemd/logind.conf)
параметры ignore,poweroff,reboot,halt(выключить),suspend(спящий режим),hibernate(глубокий сон),kexec(загрузка другого ядра). События HandleSuspendKey (кнопка спящего режима, по умолчанию suspend), HandleHibernateKey (кнопка "Глубокий сон", по умолчанию hibernate), HandleLidSwitch (закрытие крышки ноутбука, по умолчанию suspend).
Для запуска команд ухода в сон / пробуждения (закрытие видео проигрывателя, выгрузка несовместимых с режим сна прог и т.д.) используются скрипты из каталога /usr/lib/systemd/system-sleep/ - название неважно, но должны иметь 2 агрумента pre или post (сигнализирют засыпаем или пробуждаемся) и suspend или hibernate (режим сна). Пример шаблона
#!/bin/bash
case $1/$2 in
    pre/*)
        #commands
    ;;
    post/*)
        #commands
    ;;
esac
Если скриптов несколько их запуск будет одноименным.. Завершать работу системы и перевод ее в разные режимы
systemctl reboot {poweroff,halt,suspend,hibernate}
Набор команд при загрузке.2 способами. 1 - нужна запись, чтение, удаление файлов. Используется юнит tmpfiles (выполняется при старте системы и действует на основе конфигов /etc/tmpfiles.d/).
Пример - выполнить при загрузке команду "echo USBE > /proc/acpi/wakeup" отключающую пробуждение пк при подключение usb устройства, создаем файл /etc/tmpfiles.d/disable-usb-wake.conf
w /proc/acpi/wakeup - - - - USBE
если требуется запуск команд - создаем новый юнит типа сервис
vim /etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local compatibility
[Service]
Type=oneshot
ExecStart=команда или путь к скрипту
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
последняя строка говорит что он должен запускаться на уровне запуска 3 (multi-user.target), поэтому включать сервис на автозапуск не нужно.
Чтение журналов
journalctl
вывод логов команды
journalctl /usr/lib/systemd/systemd
устройства
journalctl /dev/sda
юнита
journalctl -u fail2ban
удобно для дебага скриптов сна/пробуждения
journalctl -u systemd-suspend
аналог tail -f /var/log/messages
journalctl -f

(источник http://wiki.rosalab.ru/index.php/Systemd, Исполин, каких немного (Краткий экскурс в теорию и практику systemd) (Хакер, 01/168/2013 — 108))

Комментариев нет:

Отправить комментарий