← Назад к вопросам

Что такое init в ОС?

1.8 Middle🔥 82 комментариев
#DevOps и инфраструктура

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Init в ОС — первый процесс системы

Init (initialization) — это первый процесс, который запускается операционной системой (Linux, Unix) при загрузке. Он имеет PID (Process ID) = 1 и является родителем всех остальных процессов в системе.

Основная роль Init

1. Запуск системных сервисов Init читает конфигурационные файлы и запускает необходимые сервисы (веб-серверы, БД, сетевые сервисы).

2. Управление процессами

  • Отслеживает запущенные процессы
  • Перезапускает упавшие сервисы
  • Управляет runlevels (уровни выполнения)

3. Инициализация системы

  • Монтирует файловые системы
  • Загружает драйверы ядра
  • Устанавливает переменные окружения
  • Инициализирует сетевые интерфейсы

4. Корректное завершение (shutdown) Останавливает сервисы в правильном порядке при выключении.

История Init систем

1. SysVinit (классический Init) Старая система управления сервисами через скрипты в /etc/init.d/.

service nginx start
service nginx stop
service nginx restart

2. Systemd (современный стандарт) Современная замена SysVinit, стандарт в большинстве Linux дистрибутивов.

systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl enable nginx
systemctl status nginx

Systemd — современный Init

Структура systemd

/etc/systemd/system/      # системные сервисы
~/.config/systemd/user/   # пользовательские сервисы
/usr/lib/systemd/system/  # сервисы от пакетов

Пример: собственный systemd сервис

# /etc/systemd/system/myapp.service
[Unit]
Description=My Node.js Application
After=network.target

[Service]
Type=simple
User=appuser
WorkingDirectory=/home/appuser/myapp
ExecStart=/usr/bin/node /home/appuser/myapp/dist/index.js
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Запуск:

systemctl daemon-reload
systemctl start myapp
systemctl enable myapp
systemctl status myapp
journalctl -u myapp -f

Init для Node.js приложения

Развертывание через PM2

npm install -g pm2
pm2 start dist/index.js --name "myapp"
pm2 startup
pm2 save
pm2 status
pm2 logs myapp -f

Пример PM2 конфигурации

// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'backend',
    script: './dist/index.js',
    instances: 'max',
    exec_mode: 'cluster',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    },
    error_file: './logs/error.log',
    out_file: './logs/out.log'
  }]
};

Запуск:

pm2 start ecosystem.config.js

Runlevels и systemd Targets

Старая система (SysVinit)

Runlevel 0 - Halt
Runlevel 1 - Single user
Runlevel 2-4 - Multi-user modes
Runlevel 5 - Graphical
Runlevel 6 - Reboot

Современная система (systemd)

multi-user.target - Multi-user (текстовый)
graphical.target - Графический режим
rescue.target - Режим восстановления
emergency.target - Аварийный режим

Полезные команды

systemctl get-default
systemctl set-default multi-user.target
systemctl list-units --type=service
systemctl list-unit-files --type=service | grep enabled
journalctl -u nginx -n 50
journalctl -u nginx -f
journalctl --since "2024-01-01"
systemctl reload nginx

Почему важно для Backend разработчика

  • Деплой на production — запуск приложения при загрузке сервера
  • Автоматический restart — сервис перезагружается после падения
  • Управление логами — сбор и просмотр логов
  • Мониторинг — отслеживание статуса приложения
  • Graceful shutdown — корректное завершение при обновлении

Init система — фундамент для stable и reliable production deployment Node.js приложений.