13 Отчет о состоянии службы и ее журнал




страница1/12
Дата09.11.2016
Размер5.01 Kb.
Просмотров586
Скачиваний0
  1   2   3   4   5   6   7   8   9   ...   12
systemd для администраторов
Lennart Poettering (автор)
*
Сергей Пташник (русский перевод)

Данный документ доступен на условиях лицензии
CC-BY-SA 3.0 Unported
18 ноября 2014 г.
Содержание
Предисловие автора
3 1
Контроль процесса загрузки
3 2
О службах и процессах
7 3
Преобразование SysV init-скрипта в systemd service-файл
19 4
Убить демона
23 5
Три уровня выключения
24 6
Смена корня
26 7
Поиск виновных
30 8
Новые конфигурационные файлы
34 9
О судьбе /etc/sysconfig и /etc/default
37 10 Экземпляры служб
41 11 Службы с активацией в стиле inetd
45 12 К вопросу о безопасности
49 12.1 Изолирование служб от сети
50 12.2 Предоставление службам независимых каталогов /tmp
51 12.3 Ограничение доступа служб к отдельным каталогам
51 12.4 Принудительное отключение полномочий (capabilities) для служб
52 12.5 Запрет форка, ограничение на создание файлов
53 12.6 Контроль доступа служб к файлам устройств
53 12.7 Прочие настройки
53 13 Отчет о состоянии службы и ее журнал
54 14 Самодокументированный процесс загрузки
55 15 Сторожевые таймеры
57
*
Первоисточник (на английском языке) опубликован на сайте автора:
http://0pointer.de/blog/
projects

Актуальная версия перевода доступна на личной странице переводчика:
http://www2.kangran.su/
nnz/pub/s4a/
1

16 Запуск getty на последовательных (и не только) консолях
60 16.1 Виртуальные консоли
60 16.2 Последовательные консоли
61 17 Работа с Journal
62 17.1 Сохранение логов на диск
63 17.2 Основы
63 17.3 Контроль доступа
64 17.4 Отслеживание логов в реальном времени
64 17.5 Простейшие методы выборки записей
64 17.6 Продвинутые методы выборки
65 17.7 И немного магии
66 18 Управление ресурсами с помощью cgroups
67 18.1 Процессор
68 18.2 Отслеживание использования ресурсов
69 18.3 Память
70 18.4 Ввод-вывод
70 18.5 Прочие параметры
71 19 Проверка на виртуальность
72 19.1 Условия на запуск юнитов
73 19.2 В скриптах
73 19.3 В программах
73 20 Сокет-активация служб и контейнеров
74 20.1 Сокет-активация сетевых служб
74 20.2 Сокет-активация контейнеров
75 21 Интеграция с контейнерами
78
A FAQ (часто задаваемые вопросы)
1 85
B Диагностика неполадок
2 89
B.1 Диагностика проблем с загрузкой
89
B.1.1
Если у вас нет доступа к оболочке
89
B.1.2
Если у вас есть доступ к оболочке
91
B.2 Диагностика проблем с выключением системы
91
B.2.1
Система очень долго выключается
92
B.2.2
Система не может выключиться самостоятельно
92
B.3 Просмотр состояния службы и ее журнала
92
B.4 Подготовка сообщений об ошибках
93
B.4.1
Что нужно включить в сообщение об ошибке
93
C Совместимость с SysV
3 94
D Предсказуемые имена сетевых интерфейсов
4 96
D.1 Зачем?
96
D.2 Что именно было изменено в версии 197?
97
D.3 Еще раз, что здесь хорошего?
97
D.4 Мне не нравится ваша схема. Как ее отключить?
98 1
Прим. перев.: Перевод статьи «
Frequently Asked Questions
» с официального сайта проекта, по со- стоянию на 2013-05-26 08:17:02 (коммит 8cf2b).
2
Прим. перев.: Перевод статьи «
Debugging systemd Problems
» с официального сайта проекта, по состоянию на 2013-12-20 10:44:01 (коммит abb5a).
3
Прим. перев.: Перевод статьи «
Compatibility with SysV
» с официального сайта проекта, по состоя- нию на 2013-10-06 21:37:19 (коммит 4db1c).
4
Прим. перев.: Перевод статьи «
Predictable Network Interface Names
» с официального сайта проекта,
по состоянию на 2014-02-21 15:36:45 (коммит 5613f).
2

D.5 Как именно работает новая схема?
98
E Специальные файловые системы
5 100
F Запуск служб после появления сети
6 102
F.1 Как это реализовано в systemd
. . . . . . . . . . . . . . . . . . . . . . . . . 103
F.2 Короче, как заставить network.target работать?
. . . . . . . . . . . . . . . . 104
F.3 А что делать нам, разработчикам?
. . . . . . . . . . . . . . . . . . . . . . . 105
G Моя служба не может получить приоритет realtime
7 106
Предисловие автора
Многие из вас, наверное, уже знают, что systemd
— это новая система инициали- зации дистрибутива Fedora, начиная с Fedora 14 8
. Помимо Fedora, systemd также под- держивает и другие дистрибутивы, в частности,
OpenSUSE
9
. systemd предоставляет администраторам целый ряд новых возможностей, значительно упрощающих процесс обслуживания системы. Эта статья является первой в серии публикаций, планируемых в ближайшие месяцы. В каждой из этих статей я попытаюсь рассказать об очередной новой возможности systemd. Большинство этих возможностей можно описать легко и просто, и подобные статьи должны быть интересны довольно широкой аудитории. Одна- ко, время от времени мы будем рассматривать ключевые новшества systemd, что может потребовать несколько более подробного изложения.
Lennart Poettering, 23 августа 2010 г.
1
Контроль процесса загрузки
Как правило, во время загрузки Linux по экрану быстро пробегает огромное коли- чество различных сообщений. Так как мы интенсивно работаем над параллелизацией и ускорением процесса загрузки, с каждой новой версией systemd эти сообщения бу- дут пробегать все быстрее и быстрее, вследствие чего, читать их будет все труднее. К
тому же, многие пользователи применяют графические оболочки загрузки (например,
Plymouth), полностью скрывающие эти сообщения. Тем не менее, информация, которую они несут, была и остается чрезвычайно важной — они показывают, успешно ли запу- стилась каждая служба, или попытка ее запуска закончилась ошибкой (зеленое [
OK
]
или красное [
FAILED
] соответственно). Итак, с ростом скорости загрузки систем, воз- никает неприятная ситуация: информация о результатах запуска служб бывает очень важна, а просматривать ее все тяжелее. systemd предлагает выход из этой ситуации:
он отслеживает и запоминает факты успешного или неудачного запуска служб на этапе загрузки, а также сбои служб во время работы. К таким случаям относятся выходы с ненулевым кодом, ошибки сегментирования и т.п. Введя systemctl status в своей командной оболочке, вы можете ознакомиться с состоянием всех служб, как «родных»
(native) для systemd, так и классических SysV/LSB служб, поддерживаемых в целях совместимости:
5
Прим. перев.: Перевод статьи «
API File Systems
» с официального сайта проекта, по состоянию на
2013-05-26 08:37:25 (коммит 6a93f).
6
Прим. перев.: Перевод статьи «
Running Services After the Network is up
» с официального сайта проекта, по состоянию на 2014-06-11 13:22:03 (коммит 0ff8f).
7
Прим. перев.: Перевод статьи «
My Service Can’t Get Realtime!
» с официального сайта проекта, по состоянию на 2013-05-18 08:20:36 (коммит 2f77b).
8
Прим. перев.: к сожалению, разработчики Fedora приняли решение оставить в Fedora 14 в качестве системы инициализации по умолчанию upstart, однако systemd все равно включен в этот релиз и мо- жет быть использован в качестве альтернативной системы инициализации. Окончательный переход на systemd произошел лишь в Fedora 15.
9
Прим. перев.: Сейчас systemd поддерживается практически во всех популярных дистрибутивах для настольных систем.
3

[root@lambda]
# systemctl
UNIT
LOAD
ACTIVE
SUB
JOB
DESCRIPTION
dev-hugepages.automount loaded active running
Huge Pages File System Automount Point dev-mqueue.automount loaded active running
POSIX Message Queue File System Automount Point proc-sys-fs-binfmt_misc.automount loaded active waiting
Arbitrary Executable File Formats File System Automount Point sys-kernel-debug.automount loaded active waiting
Debug File System Automount Point sys-kernel-security.automount loaded active waiting
Security File System Automount Point sys-devices-pc...0000:02:00.0-net-eth0.device loaded active plugged
82573L Gigabit Ethernet Controller
[...]
sys-devices-virtual-tty-tty9.device loaded active plugged
/sys/devices/virtual/tty/tty9
-.mount loaded active mounted
/
boot.mount loaded active mounted
/boot dev-hugepages.mount loaded active mounted
Huge Pages File System dev-mqueue.mount loaded active mounted
POSIX Message Queue File System home.mount loaded active mounted
/home proc-sys-fs-binfmt_misc.mount loaded active mounted
Arbitrary Executable File Formats File System abrtd.service loaded active running
ABRT Automated Bug Reporting Tool accounts-daemon.service loaded active running
Accounts Service acpid.service loaded active running
ACPI Event Daemon atd.service loaded active running
Execution Queue Daemon auditd.service loaded active running
Security Auditing Service avahi-daemon.service loaded active running
Avahi mDNS/DNS-SD Stack bluetooth.service loaded active running
Bluetooth Manager console-kit-daemon.service loaded active running
Console Manager cpuspeed.service loaded active exited
LSB: processor frequency scaling support crond.service loaded active running
Command Scheduler cups.service loaded active running
CUPS Printing Service dbus.service loaded active running
D-Bus System Message Bus getty@tty2.service loaded active running
Getty on tty2
getty@tty3.service loaded active running
Getty on tty3
getty@tty4.service loaded active running
Getty on tty4
getty@tty5.service loaded active running
Getty on tty5
getty@tty6.service loaded active running
Getty on tty6
haldaemon.service loaded active running
Hardware Manager hdapsd@sda.service loaded active running sda shock protection daemon irqbalance.service loaded active running
LSB: start and stop irqbalance daemon
4
iscsi.service loaded active exited
LSB: Starts and stops login and scanning of iSCSI devices.
iscsid.service loaded active exited
LSB: Starts and stops login iSCSI daemon.
livesys-late.service loaded active exited
LSB: Late init script for live image.
livesys.service loaded active exited
LSB: Init script for live image.
lvm2-monitor.service loaded active exited
LSB: Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling mdmonitor.service loaded active running
LSB: Start and stop the MD software RAID monitor modem-manager.service loaded active running
Modem Manager netfs.service loaded active exited
LSB: Mount and unmount network filesystems.
NetworkManager.service loaded active running
Network Manager ntpd.service loaded maintenance maintenance
Network Time Service polkitd.service loaded active running
Policy Manager prefdm.service loaded active running
Display Manager rc-local.service loaded active exited
/etc/rc.local Compatibility rpcbind.service loaded active running
RPC Portmapper Service rsyslog.service loaded active running
System Logging Service rtkit-daemon.service loaded active running
RealtimeKit Scheduling Policy Service sendmail.service loaded active running
LSB: start and stop sendmail sshd@172.31.0.53:22-172.31.0.4:36368.service loaded active running
SSH Per-Connection Server sysinit.service loaded active running
System Initialization systemd-logger.service loaded active running systemd Logging Daemon udev-post.service loaded active exited
LSB: Moves the generated persistent udev rules to /etc/udev/rules.d udisks.service loaded active running
Disk Manager upowerd.service loaded active running
Power Manager wpa_supplicant.service loaded active running
Wi-Fi Security Service avahi-daemon.socket loaded active listening
Avahi mDNS/DNS-SD Stack Activation Socket cups.socket loaded active listening
CUPS Printing Service Sockets dbus.socket loaded active running dbus.socket rpcbind.socket loaded active listening
RPC Portmapper Socket sshd.socket loaded active listening sshd.socket systemd-initctl.socket loaded active listening systemd /dev/initctl Compatibility Socket systemd-logger.socket loaded active running systemd Logging Socket systemd-shutdownd.socket loaded active listening systemd Delayed Shutdown Socket dev-disk-by\x1...x1db22a\x1d870f1adf2732.swap loaded active active
/dev/disk/by-uuid/fd626ef7-34a4-4958-b22a-870f1adf2732
basic.target loaded active active
Basic System bluetooth.target loaded active active
Bluetooth dbus.target loaded active active
D-Bus
5
getty.target loaded active active
Login Prompts graphical.target loaded active active
Graphical Interface local-fs.target loaded active active
Local File Systems multi-user.target loaded active active
Multi-User network.target loaded active active
Network remote-fs.target loaded active active
Remote File Systems sockets.target loaded active active
Sockets swap.target loaded active active
Swap sysinit.target loaded active active
System Initialization
LOAD
= Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB
= The low-level unit activation state, values depend on unit type.
JOB
= Pending job for the unit.
221 units listed. Pass --all to see inactive units, too.
[root@lambda]
#
(Листинг был сокращен за счет удаления строк, не относящихся к теме статьи.)
6

Обратите внимание на графу ACTIVE, в которой отображается обобщенный ста- тус службы (или любого другого юнита systemd: устройства, сокета, точки монтирова- ния — их мы рассмотрим подробнее в последующих статьях). Основными значениями обобщенного статуса являются active (служба выполняется) и inactive (служба не была запущена). Также существуют и другие статусы. Например, внимательно посмотрев на листинг выше, вы можете заметить, что служба ntpd (сервер точного времени) нахо- дится в состоянии, обозначенном как maintenance. Чтобы узнать, что же произошло с ntpd, воспользуемся командой systemctl status
10
:
[root@lambda]
# systemctl status ntpd.service ntpd.service - Network Time Service
Loaded: loaded (/etc/systemd/system/ntpd.service)
Active:
maintenance
Main: 953 (code=exited, status=255)
CGroup: name=systemd:/systemd-1/ntpd.service
[root@lambda]
#
systemd сообщает нам, что ntpd был запущен (с идентификатором процесса 953) и аварийно завершил работу (с кодом выхода 255)
11
В последующих версиях systemd, мы планируем добавить возможность вызова в та- ких ситуациях ABRT (Automated Bug Report Tool), но для этого необходима поддержка со стороны самого ABRT. Соответствующий запрос уже направлен его разработчикам,
однако пока не встретил среди них поддержки.
Резюме: использование systemctl и systemctl status является современной, более удобной и эффективной альтернативой разглядыванию быстро пробегающих по экрану сообщений в классическом SysV. systemctl status дает возможность получить развер- нутую информацию о характере ошибки и, кроме того, в отличие от сообщений SysV,
показывает не только ошибки при запуске, но и ошибки, возникшие во время исполнения службы.
2
О службах и процессах
В большинстве современных Linux-систем количество одновременно работающих процессов обычно весьма значительно. Понять, откуда взялся и что делает тот или иной процесс, становится все сложнее и сложнее. Многие службы используют сразу несколько рабочих процессов, и это отнюдь не всегда можно легко распознать по выводу команды ps. Встречаются еще более сложные ситуации, когда демон запускает сторонние про- цессы — например, веб-сервер выполняет CGI-программы, а демон cron — команды,
предписанные ему в crontab.
Немного помочь в решении этой проблемы может древовидная иерархия процессов,
отображаемая по команде ps xaf. Именно «немного помочь», а не решить полностью. В
частности, процессы, родители которых умирают раньше их самих, становят потомками
PID 1 (процесса init), что сразу затрудняет процесс выяснения их происхождения. Кро- ме того, процесс может избавиться от связи с родителем через две последовательные операции fork() (в целом, эта возможность признается нужной и полезной, и является частью используемого в Unix подхода к разработке демонов). Также, не будем забы- вать, что процесс легко может изменить свое имя посредством PR_SETNAME, или задав значение argv[0], что также усложняет процесс его опознания
12 10
Прим. перев.: Стоит заметить, что формат вывода данной команды менялся по мере развития systemd — появлялись дополнительные поля с информацией, был добавлен вывод журнала службы
(см. главу
13
) и т.д. Здесь приведен пример вывода этой команды на момент написания исходной статьи (лето 2010 года).
11
Прим. перев.: Впоследствии, про просьбам пользователей, считавших, что слово «maintenance»
недостаточно точно отражает ситуацию, оно было заменено на «failed».
12
Прим. перев.: Стоит отметить, что перечисленные ситуации могут возникнуть не только вследствие ошибок в коде и/или конфигурации программ, но и в результате злого умысла. Например, очень часто встречается ситуация, когда установленный на взломанном сервере процесс-бэкдор маскируется под нормального демона, меняя себе имя, скажем, на httpd.
7
systemd предлагает простой путь для решения обсуждаемой задачи. Запуская но- вый процесс, systemd помещает его в отдельную контрольную группу с соответству- ющим именем. Контрольные группы Linux предоставляют очень удобный инструмент для иерархической структуризации процессов: когда какой-либо процесс порождает по- томка, этот потомок автоматически включается в ту же группу, что и родитель. При этом, что очень важно, непривилегированные процессы не могут изменить свое положе- ние в этой иерархии. Таким образом, контрольные группы позволяют точно установить происхождение конкретного процесса, вне зависимости от того, сколько раз он форкал- ся и переименовывал себя — имя его контрольной группы невозможно спрятать или изменить. Кроме того, при штатном завершении родительской службы, будут заверше- ны и все порожденные ею процессы, как бы они ни пытались сбежать. С systemd уже невозможна ситуация, когда после остановки web-сервера, некорректно форкнувшийся
CGI-процесс продолжает исполняться вплоть до последних секунд работы системы.
В этой статье мы рассмотрим две простых команды, которые позволят вам наглядно оценить схему взаимоотношений systemd и порожденных им процессов. Первая из этих команд — все та же ps, однако на этот раз в ее параметры добавлено указание выводить сведения по контрольным группам, а также другую интересную информацию:
8

$ ps xawf -eo pid,user,cgroup,args
PID USER
CGROUP
COMMAND
2 root
-
[kthreadd]
3 root
-
\_ [ksoftirqd/0]
[...]
4281 root
-
\_ [flush-8:0]
1 root name=systemd:/systemd-1
/sbin/init
455 root name=systemd:/systemd-1/sysinit.service /sbin/udevd -d
28188 root name=systemd:/systemd-1/sysinit.service
\_ /sbin/udevd -d
28191 root name=systemd:/systemd-1/sysinit.service
\_ /sbin/udevd -d
1096 dbus name=systemd:/systemd-1/dbus.service /bin/dbus-daemon --system --address=systemd: --nofork --systemd-activation
1131 root name=systemd:/systemd-1/auditd.service auditd
1133 root name=systemd:/systemd-1/auditd.service
\_ /sbin/audispd
1135 root name=systemd:/systemd-1/auditd.service
\_ /usr/sbin/sedispatch
1171 root name=systemd:/systemd-1/NetworkManager.service /usr/sbin/NetworkManager --no-daemon
4028 root name=systemd:/systemd-1/NetworkManager.service
\_ /sbin/dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-wlan0.pid -lf /var/lib/dhclient/dhclient-7d32a784-ede9-4cf6-9ee3-60edc0bce5ff-wlan0.lease -
1175 avahi name=systemd:/systemd-1/avahi-daemon.service avahi-daemon: running [epsilon.local]
1194 avahi name=systemd:/systemd-1/avahi-daemon.service
\_ avahi-daemon: chroot helper
1193 root name=systemd:/systemd-1/rsyslog.service /sbin/rsyslogd -c 4 1195 root name=systemd:/systemd-1/cups.service cupsd -C /etc/cups/cupsd.conf
1207 root name=systemd:/systemd-1/mdmonitor.service mdadm --monitor --scan -f --pid-file=/var/run/mdadm/mdadm.pid
1210 root name=systemd:/systemd-1/irqbalance.service irqbalance
1216 root name=systemd:/systemd-1/dbus.service /usr/sbin/modem-manager
1219 root name=systemd:/systemd-1/dbus.service /usr/libexec/polkit-1/polkitd
1242 root name=systemd:/systemd-1/dbus.service /usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -B -u -f /var/log/wpa_supplicant.log -P /var/run/wpa_supplicant.pid
1249 68
name=systemd:/systemd-1/haldaemon.service hald
1250 root name=systemd:/systemd-1/haldaemon.service
\_ hald-runner
1273 root name=systemd:/systemd-1/haldaemon.service
\_ hald-addon-input: Listening on /dev/input/event3 /dev/input/event9 /dev/input/event1 /dev/input/event7 /dev/input/event2 /dev/input/event0 /dev/input/event8 1275 root name=systemd:/systemd-1/haldaemon.service
\_ /usr/libexec/hald-addon-rfkill-killswitch
1284 root name=systemd:/systemd-1/haldaemon.service
\_ /usr/libexec/hald-addon-leds
1285 root name=systemd:/systemd-1/haldaemon.service
\_ /usr/libexec/hald-addon-generic-backlight
1287 68
name=systemd:/systemd-1/haldaemon.service
\_ /usr/libexec/hald-addon-acpi
1317 root name=systemd:/systemd-1/abrtd.service /usr/sbin/abrtd -d -s
1332 root name=systemd:/systemd-1/getty@.service/tty2 /sbin/mingetty tty2 1339 root name=systemd:/systemd-1/getty@.service/tty3 /sbin/mingetty tty3 1342 root name=systemd:/systemd-1/getty@.service/tty5 /sbin/mingetty tty5 9

1343 root name=systemd:/systemd-1/getty@.service/tty4 /sbin/mingetty tty4 1344 root name=systemd:/systemd-1/crond.service crond
1346 root name=systemd:/systemd-1/getty@.service/tty6 /sbin/mingetty tty6 1362 root name=systemd:/systemd-1/sshd.service /usr/sbin/sshd
1376 root name=systemd:/systemd-1/prefdm.service /usr/sbin/gdm-binary -nodaemon
1391 root name=systemd:/systemd-1/prefdm.service
\_ /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1 --force-active-vt
1394 root name=systemd:/systemd-1/prefdm.service
\_ /usr/bin/Xorg :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-f2KUOh/database -nolisten tcp vt1 1495 root name=systemd:/user/lennart/1
\_ pam: gdm-password
1521 lennart name=systemd:/user/lennart/1
\_ gnome-session
1621 lennart name=systemd:/user/lennart/1
\_ metacity
1635 lennart name=systemd:/user/lennart/1
\_ gnome-panel
1638 lennart name=systemd:/user/lennart/1
\_ nautilus
1640 lennart name=systemd:/user/lennart/1
\_ /usr/libexec/polkit-gnome-authentication-agent-1 1641 lennart name=systemd:/user/lennart/1
\_ /usr/bin/seapplet
1644 lennart name=systemd:/user/lennart/1
\_ gnome-volume-control-applet
1646 lennart name=systemd:/user/lennart/1
\_ /usr/sbin/restorecond -u
1652 lennart name=systemd:/user/lennart/1
\_ /usr/bin/devilspie
1662 lennart name=systemd:/user/lennart/1
\_ nm-applet --sm-disable
1664 lennart name=systemd:/user/lennart/1
\_ gnome-power-manager
1665 lennart name=systemd:/user/lennart/1
\_ /usr/libexec/gdu-notification-daemon
1670 lennart name=systemd:/user/lennart/1
\_ /usr/libexec/evolution/2.32/evolution-alarm-notify
1672 lennart name=systemd:/user/lennart/1
\_ /usr/bin/python /usr/share/system-config-printer/applet.py
1674 lennart name=systemd:/user/lennart/1
\_ /usr/lib64/deja-dup/deja-dup-monitor
1675 lennart name=systemd:/user/lennart/1
\_ abrt-applet
1677 lennart name=systemd:/user/lennart/1
\_ bluetooth-applet
1678 lennart name=systemd:/user/lennart/1
\_ gpk-update-icon
1408 root name=systemd:/systemd-1/console-kit-daemon.service /usr/sbin/console-kit-daemon --no-daemon
1419 gdm name=systemd:/systemd-1/prefdm.service /usr/bin/dbus-launch --exit-with-session


Поделитесь с Вашими друзьями:
  1   2   3   4   5   6   7   8   9   ...   12


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал