DevOps | Вопросы собесов
5.56K subscribers
33 photos
1.5K links
Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @easyoffer_adv
Download Telegram
🤔 Зачем нужен стейт в Terraform?

Файл terraform.tfstate хранит текущее состояние инфраструктуры. Он нужен, чтобы Terraform знал, какие ресурсы уже существуют, и мог правильно управлять изменениями.

🟠Отслеживание ресурсов
Terraform использует tfstate, чтобы сопоставлять код с реальными ресурсами.
В коде создаем виртуальную машину
hcl  
resource "aws_instance" "example" {
ami = "ami-123456"
instance_type = "t2.micro"
}



Запускаем terraform apply, создается сервер в AWS
В terraform.tfstate записывается информация об этом ресурсе
При следующем terraform apply Terraform сверяет tfstate с реальными ресурсами и вносит только изменения

🟠Управление зависимостями
Когда ресурсы связаны (например, сервер и security group), Terraform понимает связи через tfstate и удаляет ресурсы в правильном порядке

🟠Работа в команде (`remote state`)
Когда несколько разработчиков работают с Terraform, tfstate должен храниться в общем месте, например
- S3 + DynamoDB (AWS)
- Terraform Cloud
- GCS + Firestore (GCP)
- Azure Storage + CosmosDB (Azure)
hcl  
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "prod/terraform.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-lock"
}
}


Ставь 👍 и забирай 📚 Базу знаний
🤔 Кто-нибудь использует ReplicaSet? Как считаете, нормальная ли это тема использовать ReplicaSet?

В большинстве случаев ReplicaSet используется опосредованно через Deployment. Прямое использование ReplicaSet возможно, если нужно точечно управлять pod'ами без стратегии обновлений, но это редко требуется. Лучше использовать Deployment как стандарт.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое basic auth?

Basic Auth (Basic Authentication) – это простой метод аутентификации HTTP-запросов.
Он используется для ограничения доступа к ресурсам, отправляя логин и пароль в заголовке запроса.

🟠Как работает Basic Auth?
Клиент делает запрос к серверу.
Сервер отвечает 401 Unauthorized и требует аутентификацию:

   HTTP/1.1 401 Unauthorized  
WWW-Authenticate: Basic realm="Restricted Area"


Клиент кодирует логин и пароль в Base64 и отправляет их в заголовке:

   Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=


🟠Пример запроса с Basic Auth
В curl
curl -u username:password http://example.com/protected


В Python (requests):
import requests
from requests.auth import HTTPBasicAuth

response = requests.get("http://example.com/protected", auth=HTTPBasicAuth("username", "password"))
print(response.text)


В JavaScript (fetch):
fetch("http://example.com/protected", {
headers: {
"Authorization": "Basic " + btoa("username:password")
}
})
.then(response => response.text())
.then(data => console.log(data));


🚩Минусы

➖Не безопасен без HTTPS
данные передаются в открытом виде (Base64 — это не шифрование!).
➖Логин и пароль передаются в каждом запросе
что делает систему уязвимой.
➖Нет механизма разлогинивания
браузеры кэшируют креды, и их сложно сбросить.

Ставь 👍 и забирай 📚 Базу знаний
🤔 На каких принципах работает докер?

Это платформа для автоматизации развертывания, масштабирования и управления приложениями в контейнерах. Контейнеры позволяют изолировать приложения и их зависимости, обеспечивая легкую переносимость и консистентность окружения. Основные принципы работы Docker включают в себя контейнеризацию, использование образов, контейнеров, оркестрацию и сетевую инфраструктуру.

🚩Основные принципы

🟠Контейнеризация
Контейнеризация позволяет запускать приложения и их зависимости в изолированных окружениях. Контейнеры предоставляют легкие и эффективные среды, которые включают все необходимое для запуска приложений.
Контейнеры: Легковесные, изолированные окружения, которые работают поверх ядра хостовой операционной системы.
Namespace: Механизм ядра Linux, обеспечивающий изоляцию процессов, сети, PID, пользовательских идентификаторов и монтирования файловых систем.
Cgroups: Контрольные группы в Linux, которые ограничивают и отслеживают использование ресурсов контейнерами, включая процессорное время, память и I/O.

🟠Использование образов
Образы Docker являются шаблонами для создания контейнеров. Образ включает в себя все необходимые компоненты, такие как код приложения, библиотеки, зависимости и конфигурационные файлы.
Dockerfile: Скрипт, содержащий инструкции по созданию образа. Используется для автоматизации создания образов.
Слойность: Каждый образ состоит из нескольких слоев, которые кэшируются и могут использоваться повторно, что ускоряет процесс сборки и уменьшает использование ресурсов.

🟠Изоляция и безопасность
Docker обеспечивает изоляцию приложений, что позволяет запускать несколько контейнеров на одном хосте без взаимного влияния.
Изоляция процессов: Каждый контейнер имеет свой собственный процессорный контекст, что исключает конфликты между приложениями.
Изоляция файловой системы: Контейнеры имеют свои собственные файловые системы, изолированные от файловой системы хостовой операционной системы.
Безопасность: Docker использует механизмы, такие как AppArmor, SELinux и seccomp, для обеспечения безопасности контейнеров.

🟠Управление сетями
Docker предоставляет гибкие возможности управления сетями для контейнеров, включая создание изолированных сетей и подключение контейнеров к различным сетям.
Bridge Network: Создает изолированную сеть для контейнеров на одном хосте.
Host Network: Контейнер использует сетевые интерфейсы хостовой операционной системы.
Overlay Network: Позволяет контейнерам на разных хостах взаимодействовать друг с другом.
Macvlan Network: Контейнеры получают собственные MAC-адреса и ведут себя как физические устройства в сети.

🟠Хранение данных
Docker поддерживает различные механизмы хранения данных для обеспечения сохранности и доступности данных контейнеров.
Volumes: Независимые от контейнеров хранилища данных, которые могут быть подключены к одному или нескольким контейнерам.
Bind Mounts: Позволяют монтировать директории хостовой файловой системы в контейнеры.
Tmpfs: Использует память хоста для хранения данных контейнера, что полезно для временных данных.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое args и kwargs и как их использовать в Python?

- *args — позволяет передать произвольное количество позиционных аргументов в функцию.
- **kwargs — позволяет передать произвольное количество именованных аргументов.
Они полезны для написания гибких функций и декораторов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как настраивать графики на панели графаны?

Настройка графиков на панели Grafana позволяет визуализировать данные из подключенных источников в удобной и наглядной форме.

1⃣Создание новой панели (Panel)
Откройте существующий дашборд или создайте новый: Перейдите в раздел Dashboards → New Dashboard.
Нажмите Add new panel для добавления панели.

2⃣Выбор источника данных
В интерфейсе панели в разделе Query выберите источник данных (Data Source) из выпадающего списка. Например, Prometheus, InfluxDB, MySQL, Elasticsearch. Подключение источника данных настраивается через Configuration → Data Sources.

3⃣Написание запроса для графика
Каждый источник данных имеет свой язык запросов. Примеры:
Prometheus
rate(http_requests_total[5m])


MySQL
SELECT time, value FROM metrics WHERE time > NOW() - INTERVAL 1 HOUR;


Elasticsearch: Используйте Lucene или Elasticsearch Query DSL.

4⃣Настройка визуализации
В разделе Visualization выберите тип графика: Time series (график по времени). Bar chart (столбчатая диаграмма). Gauge (гейдж/индикатор). Table (таблица). Pie chart (круговая диаграмма, доступна через плагин).
Настройте параметры визуализации: Линии, точки, области (lines, points, fill). Цвета линий, область графика. Подписи данных.

5⃣Форматирование данных
В разделе Transform: Преобразуйте данные (группировка, сортировка, вычисления). Добавьте фильтры или агрегируйте данные. В разделе Overrides: Настройте специфичные параметры для отдельных рядов данных (цвета, форматы отображения).

6⃣Настройка временного интервала
Выберите временной диапазон панели в правом верхнем углу дашборда: Например, последние 5 минут, 1 час, 24 часа. Установите параметры временного сдвига, если нужно отображать данные за конкретный период.

7⃣Настройка подписей и описаний
В разделе Panel settings: Укажите название панели. Добавьте описание для контекста.

8⃣Сохранение дашборда
Нажмите Save dashboard. Укажите имя дашборда и добавьте теги (опционально) для удобного поиска.

🚩Полезные фишки

🟠Панели Variables
Позволяют создавать динамические фильтры. Например, добавьте переменную для выбора имени хоста:
label_values(node_cpu_seconds_total, instance)


🟠Плагины визуализации
Установите дополнительные плагины из Grafana Marketplace (например, Pie Chart, Worldmap Panel).

Ставь 👍 и забирай 📚 Базу знаний
🔥1
🤔 Как правильно установить Ansible?

Зависит от ОС. Основные способы:
- Через pip install ansible (универсальный способ);
- Через пакетный менеджер (apt, yum, dnf);
- Через docker-контейнер;
- В enterprise-решениях — через AWX / Ansible Tower.
После установки важно проверить через ansible --version.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Какая может быть проблема если вы подключаетесь к серверу через ssh а вам приходят тикеты, что другие пользователи не могут подключиться по ssh по одной и той же учётной записи

Если вы можете подключиться к серверу по SSH, но другие пользователи, использующие ту же учетную запись, не могут, возможны следующие причины:

🟠Проблема с ограничением количества подключений
В файле конфигурации SSH (/etc/ssh/sshd_config) могут быть ограничения на число одновременных подключений.
Открываем конфигурацию SSH
sudo nano /etc/ssh/sshd_config


Проверяем параметры
MaxSessions 1
MaxStartups 10:30:60


Решение
Увеличьте MaxSessions, например:
MaxSessions 10


Перезапустите SSH:
sudo systemctl restart sshd


🟠Файл .ssh/authorized_keys имеет неверные права
Если у вас ключевая авторизация, возможно, права на файлы .ssh/authorized_keys нарушены.
На сервере выполните:
ls -l ~/.ssh/authorized_keys


Если права не 600, исправьте
chmod 600 ~/.ssh/authorized_keys


🟠Ограничение по IP (DenyUsers, AllowUsers, TCP Wrappers)
Конфигурация SSH может блокировать подключения для определенных IP или пользователей.
Откройте /etc/ssh/sshd_config и проверьте параметры
DenyUsers user1
AllowUsers admin


Проверьте /etc/hosts.deny и /etc/hosts.allow
cat /etc/hosts.deny
cat /etc/hosts.allow


🟠Закончились доступные PTY (псевдотерминалы)
Если исчерпан лимит доступных PTY, новые сессии не смогут открываться.
Запустите
ls /dev/pts


Если там слишком много открытых сессий, попробуйте очистить:
pkill -u user


или увеличьте лимит в /etc/security/limits.conf
* hard nproc 1024
* soft nproc 1024


Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 В каких случаях удобно использовать Kubernetes, а в каких Docker Compose?

- Docker Compose — подходит для простых локальных окружений, отладки, микросервисов в одной машине.
- Kubernetes — для продакшн-окружений, масштабируемости, отказоустойчивости, автодеплоя.
Kubernetes нужен там, где требуется оркестрация, распределённость и гибкость.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Где бы хранил tfstate если много разрабов?

Файл terraform.tfstate содержит текущее состояние инфраструктуры. Если его неправильно хранить, возможны конфликты и повреждение данных.

🚩Плохие решения

Локально (terraform.tfstate в репозитории)
Потеря данных, если разработчик сменит машину.
Конфликты, если несколько человек применяют terraform apply.
Невозможно откатиться к старому состоянию.
Не поддерживает блокировки (terraform lock).
Возможны проблемы с одновременным доступом.

🚩Лучшие решения для хранения `tfstate`

🟠S3 + DynamoDB (AWS) → Самый популярный способ
S3 хранит tfstate, а DynamoDB предотвращает конфликты.
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "prod/terraform.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-lock"
}
}


🟠Terraform Cloud/Enterprise → Официальное SaaS-решение
Terraform Cloud хранит tfstate в облаке HashiCorp.
terraform {
backend "remote" {
hostname = "app.terraform.io"
organization = "my-org"
workspaces {
name = "my-workspace"
}
}
}


🟠Google Cloud Storage (GCS) + Firestore (GCP)
Для GCP аналог AWS S3 — это Google Cloud Storage (GCS), а DynamoDB заменяется Firestore.
terraform {
backend "gcs" {
bucket = "my-tfstate-bucket"
prefix = "terraform/state"
}
}


🟠Azure Storage + Azure CosmosDB (Azure)
Для Azure можно использовать Azure Storage и блокировки через Azure CosmosDB.
terraform {
backend "azurerm" {
resource_group_name = "my-rg"
storage_account_name = "myterraformstate"
container_name = "tfstate"
key = "prod.terraform.tfstate"
}
}


Ставь 👍 и забирай 📚 Базу знаний
🔥1
🤔 Что такое PaaS?

Platform as a Service — модель, при которой платформа (среда исполнения, контейнер, фреймворк) уже настроена, и разработчик разворачивает код без управления инфраструктурой. Пример: Heroku, App Engine.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 По какой причине inode могут закончиться?

Это структуры данных, которые хранят информацию о файлах и каталогах. Каждый файл или каталог на диске ассоциируется с одним inode, который содержит метаданные файла, такие как его размер, разрешения, временные метки, ссылки на блоки данных и т.д. Количество inode на файловой системе обычно определяется в момент её создания и не может быть изменено без переформатирования или значительных изменений в файловой системе.

🚩Причины исчерпания

🟠Большое количество мелких файлов
Одной из наиболее частых причин исчерпания inode является наличие очень большого количества маленьких файлов на файловой системе. Поскольку каждый файл использует как минимум один inode, системы с большим количеством мелких файлов могут исчерпать доступные inode, даже если дисковое пространство по-прежнему доступно.

🟠Недостаточное количество выделенных inode
При создании файловой системы, если количество выделенных inode было рассчитано неправильно (слишком мало для предполагаемого использования), это может привести к раннему их исчерпанию. Это особенно актуально для серверов или систем, где ожидается большое количество файлов.

🟠Особенности файловой системы
Некоторые файловые системы, такие как Ext3 или Ext4, имеют фиксированное соотношение inode к объёму файловой системы, которое задаётся при их создании. Если создать файловую систему с недостаточным количеством inode для конкретного случая использования, то в дальнейшем это может стать проблемой.

🚩Решения проблемы исчерпания

🟠Проверка использования
С помощью команды df -i можно проверить, сколько inode используется и сколько ещё доступно в вашей файловой системе.

🟠Очистка файловой системы
Удаление ненужных или временных файлов может освободить inode.

🟠Изменение файловой системы
Если возможно, можно увеличить количество inode путём изменения файловой системы или пересоздания файловой системы с более высоким количеством inode. Для файловых систем, таких как XFS или некоторые конфигурации Btrfs, можно динамически добавлять inode.

🟠Использование других файловых систем
Переход на другую файловую систему, которая не имеет строгих ограничений на количество inode (например, Btrfs или ZFS), может быть решением для систем с большим количеством маленьких файлов.

🟠Архивирование
Программы и процессы, которые создают большое количество мелких файлов, могут модифицироваться для хранения данных в формате архивов вместо отдельных файлов, что снижает потребление inode.

Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Какие параметры файловой системы могут влиять на выбор файловой системы?

Файловая система выбирается по ряду параметров:
- Тип нагрузки – большие файлы (XFS, ZFS) или много мелких файлов (EXT4, Btrfs).
- Журналирование – влияет на отказоустойчивость (XFS, EXT4).
- Снапшоты – нужны ли сохранения состояний файлов (Btrfs, ZFS).
- Шифрование – встроенная защита данных (ZFS, LUKS).
- Резервирование пространства – например, XFS и ZFS резервируют место.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое container network module в докере?

Это архитектурная модель, разработанная Docker для управления сетями контейнеров. Она описывает, как создаются, управляются и взаимодействуют сетевые компоненты в Docker-контейнерах. CNM служит основой для организации сетей Docker и позволяет подключать контейнеры к различным сетевым средам, обеспечивая гибкость, масштабируемость и безопасность.

🚩Основные компоненты CNM

🟠Sandbox
Это изолированная среда, где настраиваются сетевые интерфейсы контейнера, такие как IP-адреса, маршруты и DNS. Что включает: veth-пара интерфейсов (виртуальный Ethernet): соединяет контейнер с внешней сетью. Конфигурации маршрутов и сетевых правил.

🟠Endpoint
Точка подключения контейнера к сети. Функции: Обеспечивает контейнеру связь с другими контейнерами или внешними сетями. Соединяет Sandbox с Network.

🟠Network
Логическая сущность, объединяющая Endpoints для обеспечения взаимодействия контейнеров. Типы сетей в Docker:
bridge: Локальная сеть, позволяющая контейнерам взаимодействовать на одном хосте.
host: Контейнеры используют сетевой стек хоста без изоляции.
none: Сеть отключена; контейнер полностью изолирован.
overlay: Распределенная сеть для связи контейнеров на разных хостах.
macvlan: Контейнеры получают прямой доступ к физической сети.

🚩Как это работает в Docker

Создается Sandbox, где настраиваются сетевые параметры контейнера.
Создается Endpoint, который подключает контейнер к выбранной сети.
Endpoint добавляется в Network, что позволяет контейнеру взаимодействовать с другими узлами.

🚩Плюсы

➕Гибкость
Легко подключать контейнеры к различным типам сетей.
➕Изоляция
Обеспечивает безопасность, изолируя сетевые пространства контейнеров.
➕Расширяемость
CNM поддерживает сторонние плагины для интеграции с другими сетевыми решениями (например, Calico, Flannel).
➕Управляемость
Позволяет контролировать настройки сети через команды Docker.

🚩Пример создания сети

1⃣Создание сети
docker network create my_bridge


2⃣Подключение контейнера к сети
docker run --network my_bridge -d nginx


Ставь 👍 и забирай 📚 Базу знаний
🤔 На каком шаге заканчивается Continuous Integration?

CI заканчивается после:
- успешной сборки,
- прохождения тестов,
- публикации артефактов.
Далее идёт этап доставки (delivery) или развёртывания (deployment) — это уже CD.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как определить опции запуска пайплайна при редактировании определенных ресурсов в гите?

При работе с CI/CD (GitHub Actions, GitLab CI, Jenkins) часто нужно запускать пайплайн только при изменении определенных файлов. Это помогает оптимизировать сборку, экономить ресурсы и время.

🚩В GitHub Actions (on: push, paths)

В GitHub Actions можно указать файлы, изменения в которых запустят пайплайн.
name: Infra Pipeline
on:
push:
paths:
- 'infra/**'
- 'k8s/**'
pull_request:
paths:
- 'infra/**'
- 'k8s/**'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Deploy Infrastructure
run: ./deploy.sh


🚩В GitLab CI/CD (only: changes)

В GitLab можно настроить запуск пайплайна по изменению файлов с помощью only: changes.
stages:
- deploy

terraform:
stage: deploy
script:
- terraform apply -auto-approve
only:
changes:
- terraform/**


🚩В Jenkins (when { changes })

В Jenkins Declarative Pipeline можно использовать when { changes } для проверки измененных файлов.
pipeline {
agent any
stages {
stage('Deploy Ansible') {
when { changes path: 'ansible/**' }
steps {
sh './deploy_ansible.sh'
}
}
stage('Deploy Helm') {
when { changes path: 'helm/**' }
steps {
sh './deploy_helm.sh'
}
}
}
}


Ставь 👍 и забирай 📚 Базу знаний
🤔 Какой экспортер используется, если есть Kubernetes и нужно в Elasticsearch отправлять данные?

Обычно используется Fluent Bit или Fluentd с output-плагином для Elasticsearch. Эти агенты собирают логи с нод, контейнеров и pod'ов и отправляют их напрямую в Elasticsearch.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2🔥1
🤔 Что сейчас больше используется ингресс класс в ингрессе или указывается ингресс контроллер непосредственно в апликейшене?

Сейчас стандартом является использование ingressClassName, а аннотации kubernetes.io/ingress.class считаются устаревшими (deprecated).

🚩Что лучше использовать?

🟠`ingressClassName` (новый метод, Kubernetes 1.19+)
Современный, удобный, поддерживается официально
Работает с IngressClass ресурсами
Можно управлять через CRD (IngressClass)

🟠Аннотация `kubernetes.io/ingress.class` (старый метод, deprecated с 1.18)
Все еще работает, но устарела
Нельзя контролировать IngressClass через CRD

🚩Как правильно указывать `ingressClassName`?

1⃣Настраиваем IngressClass (если нужно)
yaml  
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
spec:
controller: k8s.io/ingress-nginx



2⃣Используем ingressClassName в Ingress
yaml  
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80



🚩Старый способ (не рекомендуется, но все еще встречается)

Раньше использовали аннотацию kubernetes.io/ingress.class
yaml  
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80


Ставь 👍 и забирай 📚 Базу знаний
🤔 Где находится swap какое устройство использует?

Это область на диске, которую операционная система использует как виртуальную память, если основной оперативной памяти (RAM) не хватает. Swap может быть представлен в виде:

🚩Где находится swap?

🟠Swap-раздел
Swap может быть выделен как отдельный раздел диска. Он создается во время установки системы или вручную и не имеет файловой системы (тип раздела — swap).
🟠Swap-файл
Swap может быть представлен как обычный файл в файловой системе (например, /swapfile).

🚩Как узнать, где находится swap?

Используйте команды для проверки текущей конфигурации:

Проверка swap через swapon
swapon --show


Пример вывода
NAME       TYPE      SIZE   USED PRIO
/dev/sda2 partition 4G 1G -2
/swapfile file 2G 0B -3

- NAME: Устройство или файл, используемый для swap.
- TYPE: Указывает, является ли swap разделом или файлом.
- SIZE: Размер swap.
- USED: Сколько swap в данный момент используется.
- PRIO: Приоритет использования (меньшее значение — меньший приоритет).

Проверка через free
free -h


🚩Проверка через `fstab`

Если swap является разделом, он обычно прописан в /etc/fstab
cat /etc/fstab | grep swap


Пример
/dev/sda2    none    swap    sw    0   0


🚩Какое устройство использует swap?

Если swap — это раздел, то он отображается как устройство, например, /dev/sda2. Если swap — это файл, его путь будет, например, /swapfile.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое императивный подход?

Императивный подход — это пошаговое описание того, что делать. Скрипт задаёт последовательность инструкций: "установи пакет", "создай файл", "перезапусти службу". Контроль полностью в руках разработчика.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие процессы убивает long killer?

Это системный механизм в Astra Linux (и некоторых других дистрибутивах на базе Debian), который убивает "долгоиграющие" процессы, потребляющие слишком много ресурсов. Он предотвращает зависания системы и защищает от неэффективного использования вычислительных мощностей.

🚩Какие процессы убивает Long Killer?

Long Killer анализирует процессы и завершает те, которые:
Запущены от обычного пользователя (не root).
Работают слишком долго (по умолчанию >10 минут).
Потребляют много CPU (по умолчанию >90% CPU).
Используют много памяти (если система близка к OOM – Out of Memory).
Не имеют активности (зависли, например, ожидание ввода).

Он не убивает root-процессы.
Системные службы (например, sshd, systemd) остаются нетронутыми.
Если процесс выполняется интерактивно (например, работа в vim или nano), он обычно не трогает его.

🚩Как проверить, что процесс убит Long Killer?

Если подозреваете, что ваш процесс завершился из-за Long Killer, посмотрите логи
journalctl -u long-killer.service --no-pager | tail -n 20


Также можно проверить dmesg
dmesg | grep "killed by Long Killer"


🚩Как отключить или настроить Long Killer?

Файл конфигурации находится здесь
/etc/long-killer.conf


Пример настроек
MAX_CPU_USAGE=90     # Максимальная загрузка CPU (%)
MAX_EXEC_TIME=600 # Максимальное время выполнения (секунды)
EXCLUDE_USERS=root # Не убивать процессы от root


После изменения перезапустите сервис
systemctl restart long-killer.service


Чтобы полностью отключить Long Killer
systemctl stop long-killer.service
systemctl disable long-killer.service


🚩Как избежать убийства процессов?

Запуск от root (если это безопасно):
sudo my_long_process

Снижение приоритета процесса (nice/renice)
nice -n 10 my_process
renice -n 10 -p <PID>

Использование nohup или screen для фоновых задач
nohup my_script.sh &


Ставь 👍 и забирай 📚 Базу знаний
👍1