Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
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 приложений.