Как узнать какая система инициализации используется в linux
Перейти к содержимому

Как узнать какая система инициализации используется в linux

  • автор:

16 Янв 2018 22:01:23 | 2 комментария

Как узнать какая система инициализации в вашем дистрибутиве Unix/Linux

Иногда интересно и полезно знать какая система инициализация используется на Вашем Linux-сервере.

Как достоверно узнать SYSTEMD, UPSTART или SYSVINIT у Вас ? Читаем ниже.

Проверить какая система инициализации на Linux можно множеством путей, как правила все они зависят от версии Linux дистрибутива и не все работают 100% на всех дистрибутивах, первоначально выполняем:

ls -l `which init`

если вывод покажет наличие симлин вида

lrwxrwxrwx 1 root root 20 фев 15 2017 /sbin/init -> /lib/systemd/systemd

то тут все понятно — система инициализации systemd, а если симлинка нет, то тогда выполняем:

strings /sbin/init | awk 'match($0, /(upstart|systemd|sysvinit)/) < print toupper(substr($0, RSTART, RLENGTH));exit; >'

В ответ вы получите либо SYSTEMD, либо UPSTART, либо SYSVINIT.

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

Какая система инициализации используется в данный момент?

Насколько я понял upstart, программа, запускающая все остальные программы в системе, использует скрипты в /etc/init . В то время как её аналог systemd использует для запуска программ скрипты из /etc/init.d . Но у меня есть две этих папки /etc/init и /etc/init.d . В каждой из них есть скрипт запуска nginx. Они отличаются содержимым. Так вряд ли было бы, будь у них одинаковый функционал. Как определить, какая служба используется для управления процессами: Upstart, systemd, стандартный init?

Отслеживать
68.2k 225 225 золотых знаков 80 80 серебряных знаков 223 223 бронзовых знака
задан 29 янв 2016 в 7:28
mspolitaev mspolitaev
620 4 4 серебряных знака 22 22 бронзовых знака
А что за Linux у Вас?
29 янв 2016 в 7:39

init.d — это вообще для старого sysvinit и используется для обратной совместимости и в upstart, и в systemd

29 янв 2016 в 8:05

@MishaPolitaev просто init, что то очень нестандартное. Видел где то такой каталог, но к загрузке системы он отношения не имел. Так что init.d лучше смотрите. И еще в rc.d (rc.3 и т.п.), если они есть лежат ссылки на все, что запускается.

29 янв 2016 в 8:27
29 янв 2016 в 8:45

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

sysvinit и прочие пришедшие ему на замену системы инициализации unix-подобных операционных систем могут присутствовать в отдельно взятой установке одновременно.

какой первый процесс запустит программа, выполняющая функции ядра операционной системы, после собственной загрузки и инициализации, «того и тапки».

если эти функции исполняет программа linux, то по умолчанию она запускает программу/скрипт, находящийся в файле /sbin/init . данное поведение можно переопределить, передав параметр загрузки init=/путь/к/файлу . узнать, передан ли такой параметр, несложно:

$ grep -o 'init=\w*' /proc/cmdline 

лишь по одному «внешнему виду» файла /sbin/init определить, какой именно из систем инициализации он принадлежит, затруднительно. разве что он является символической ссылкой на файл с более «выразительным» именем. например:

$ ls -l /sbin/init lrwxrwxrwx 1 root root 20 Aug 29 18:45 /sbin/init -> /lib/systemd/systemd 

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

$ dpkg -S /sbin/init $ rpm -qf /sbin/init $ equery belongs /sbin/init $ pacman -Qo /sbin/init . 

Система инициализации в Unix/Linux

Иногда интересно какая же инициализация используется на сервере и в моей статье «Система инициализации в Unix/Linux» я расскажу как можно узнать какая система инициализации используется на сервере.

Основные системы инициализации:

  • sysvinit — Стиль SysVinit существовал еще со времен SystemV, которая была разработана еще в 1983 году. Это установило стандарт инициализации POSIX систем.
  • upstart — система инициализации ОС, которая управляет запуском демонов в течение загрузки системы, их остановку, а также управляет ими во время работы системы. Первоначально была разработана для дистрибутива Ubuntu, но затем стала использоваться и в других дистрибутивах Linux, например в Fedora (впоследствии была заменена systemd), как замена UNIX System V init.
  • systemd — это системный менеджер, (демон для инициализации других демонов в Linux), который пришел и почти заменил SysV. Основное отличие — распределенный запуск служб в процессе загрузки системы, что позволяло существенно ускорить запуск операционной системы.
  • launchd — система инциализации системы с открытым исходным кодом, используемая в ОС Mac OS X. Процесс имеет PID 1 и занимается тем, что запускает другие процессы и перезапускает их в случае сбоя, то есть выполняет функции init UNIX и Linux (в новых версиях Linux осуществляется переход на systemd).

Команды по системам инициализации в Unix/Linux ОС:

Система инициализации в Unix/Linux

Существует несколько способов проверить это, сейчас я покажу как это сделать.

-=== СПОСОБ 1 — проверка PID процессов==-

Например, Ubuntu до версии 14 использовала систему инициализацию Upstart чтобы проверить это, выполните:

$ ps aux | grep upstart
$ ps -p 1

Например, Ubuntu 16 и CentOS 7 использовала систему инициализацию SystemD чтобы проверить это, выполните:

$ ps aux | grep systemd

Или если используется Ubuntu 16, можно выполнить:

$ ps -p 1
$ ps -s1

Или, другой пример:

$ ps -1
$ (ps -eo "ppid,args" 2>/dev/null || echo "ps call error") | awk 'NR==1 || $1==1'

Или (если чтобы было красиво):

$ ps -s1 | awk ''| grep -Ev "CMD"

Например, CentOS 6 использовала систему инициализацию Upstart, но с init процессом и чтобы проверить это, выполните:

$ ps aux | grep init

-=== СПОСОБ 2 — проверка файлов==-

Запускаем следующую команду:

$ /sbin/init --version

Если на сервере используется init инициализация, то она отобразится при выводе. В противном случае — скажет что такой команды нет.

# initctl --version

ИЛИ, можно выполнить:

$ file /sbin/init

Вот вам еще довольно стоящий пример:

# strings /sbin/init | grep -q "/lib/systemd" && echo SYSTEMD # strings /sbin/init | grep -q "upstart" && echo UPSTART # strings /sbin/init | grep -q "sysvinit" && echo SYSVINIT
$ strings /sbin/init | awk 'match($0, /(upstart|systemd|sysvinit)/) < print toupper(substr($0, RSTART, RLENGTH));exit; >'

-=== СПОСОБ 3 — с помощью ФС==-

Можно запустить следующую команду:

# ls -l /proc/1/exe

Команда что выше, проверяет exe симлинку в папке /proc/1. А собственно «1» – это PID 1-го процесса.

$ < ls -l /proc/1/fd |grep -q systemd && echo "init: systemd"; >|| \ < ls -l /proc/1/fd |grep -q /run/initctl && echo "init: sysvinit"; >|| \ < ls -l /proc/1/fd |grep -q upstart && echo "init: upstart"; >|| \ < ls -l /proc/1/exe |grep -q busybox && echo "init: busybox"; >|| \ echo "unknown init"

-=== СПОСОБ 4 — с помощью готового bash скрипта==-

# vim INIT.sh

И прописываем в него:

#!/usr/bin/env bash # init process is pid 1 INIT=`ls -l /proc/1/exe` if [[ $INIT == *"upstart"* ]]; then SYSTEMINITDAEMON=upstart elif [[ $INIT == *"systemd"* ]]; then SYSTEMINITDAEMON=systemd elif [[ $INIT == *"/sbin/init"* ]]; then INIT=`/sbin/init --version` if [[ $INIT == *"upstart"* ]]; then SYSTEMINITDAEMON=upstart elif [[ $INIT == *"systemd"* ]]; then SYSTEMINITDAEMON=systemd fi fi if [ -z "$SYSTEMINITDAEMON" ]; then echo "WARNING: Unknown distribution, assuming defaults - this may fail." >&2 else echo "Init system discovered: $SYSTEMINITDAEMON" fi

Можно добавить прав на исполнение:

# chmod +x INIT.sh

И для запуска, юзаем:

# bash INIT.sh

-=== СПОСОБ 5 — с помощью пакетного менеджера==-

Если используете centOS/RedHat/Fedora/Suse, то можно выполнить:

$ rpm -qf /sbin/init

Если используете Debian/Ubuntu/Mint/др, то можно выполнить:

$ dpkg -S /sbin/init

-=== СПОСОБ 6 — с помощью lsof==-

Так же, можно выполнить:

$ ps -eaf| grep -E "[s]ystemd|init|[u]pstart"

-=== СПОСОБ 7 — с помощью ls и which==-

# ls -l `which init`

Вот и все. Если имеются другие примеры проверки инициализации, пишите в комментариях. Тема «Система инициализации в Unix/Linux» завершена.

This entry was posted in Debian’s, FreeBSD, Kali Linux, MacOS, RHEL’s. Bookmark the permalink.

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Рубрики

  • Arch Linux (167)
  • Commands (36)
  • Debian’s (635)
    • Administration tools Ubuntu (37)
    • Backups Debian’s (7)
    • Database в Ubuntu (58)
    • Games (игры) (1)
    • Monitoring в Debian и Ubuntu (49)
    • Virtualization в Ubuntu / Debian/ Linux Mint (41)
      • Docker (22)
      • Kubernetes (6)
      • KVM (4)
      • OpenVZ (3)
      • Vagrant (5)
      • VirtualBox (6)
      • ArgoCD (1)
      • Concourse (1)
      • Gitlab (1)
      • Jenkinks (4)
      • Spinnaker (1)
      • Apache (32)
      • Cherokee (1)
      • FTP-services (5)
      • Lighttpd (1)
      • Nginx (26)
      • PHP (27)
      • Proxy для Debian’s (2)
      • Tomcat (4)
      • Панели управления в Ubuntu/Debian/Mint (24)
      • Установка и настройка почты на Ubuntu/Debian (12)
      • Хранилища (clouds) (2)
      • Administration tools freeBSD (19)
      • Database во FreeBSD (52)
      • Monitoring во freeBSD (37)
      • Virtualization во FreeBSD (22)
      • VoIP (1)
      • Установка Web сервисов (91)
      • Установка и настройка почты (6)
      • Установка из ports (пакетов) (19)
      • Установка из sorce code (исходников) (23)
      • Непрерывная интеграция (CI) (27)
      • Database в MacOS (36)
      • Monitoring в Mac OS (31)
      • Security (безопасность) (12)
      • Virtualization в Mac OS (30)
        • Docker (19)
        • Kubernetes (6)
        • Vagrant (5)
        • VirtualBox (5)
        • ArgoCD (1)
        • CircleCI (1)
        • Concourse (1)
        • Gitlab (1)
        • Jenkinks (4)
        • Spinnaker (1)
        • Administration tools CentOS (49)
        • Backups RPM’s (4)
        • Database в CentOS (68)
        • Monitoring в CentOS (67)
        • Virtualization в CentOS/ Red Hat/ Fedora (42)
          • Docker (23)
          • Kubernetes (6)
          • KVM (5)
          • OpenVZ (2)
          • Vagrant (5)
          • VirtualBox (6)
          • VMWare (3)
          • ArgoCD (1)
          • Concourse (1)
          • Gitlab (1)
          • Jenkinks (4)
          • Spinnaker (1)
          • Apache (35)
          • Cherokee (1)
          • DNS (3)
          • FTP (10)
          • Nginx (33)
          • PHP (34)
          • Proxy для RedHat’s (2)
          • Tomcat (2)
          • Voice (2)
          • Панели управления в CentOS/Red Hat/Fedora (27)
          • Прокси сервер на CentOS/RHEL/Fedora (4)
          • Установка и настройка почты на CentOS/RHEL/Fedora (14)
          • Хранилища (clouds) (1)

          соц сети

          Unix-Linux- в примерах

          Unix-Linux- в примерах

          Unix-Linux- в примерах

          Архив новостей

          Свежие записи

          • Pull/Push AWS ECR образов через AWS Route53 CNAME 17.11.2021
          • openpgp: signature made by unknown entity в Terraform 09.11.2021
          • Установка Terraformer в Unix/Linux 31.05.2021
          • Установка ArgoCD в Unix/Linux 06.01.2021
          • Установка tfswitch в Unix/Linux 08.12.2020

          Свежие комментарии

          • Альф к записи Утилита pv — прогресс bar для консольных утилит в Unix/Linux
          • Александр к записи Оптимизация настроек Zabbix
          • Вадим к записи Переключить версию python в Unix/Linux
          • Максим к записи Сохраняем все резервные копии в Dropbox
          • Артём к записи Переключить версию python в Unix/Linux

          Как проверить, какая система инициализации ядра стоит на сервере?

          Здравствуйте, у меня такой вопрос возник , как определить какая система инициализации стоит на сервере linux? Есть ли какая то команда чтобы показать это? Я конечно понимаю что сейчас последние дистрибутивы поставляются с systemd на борту, но все же хотелось бы как то наглядно это увидеть, так как в моей системе нету такой утилитки как systemctl, значит в ней не systemd стоит?

          • Вопрос задан более трёх лет назад
          • 5081 просмотр

          4 комментария

          Оценить 4 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *