мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| devops_training_in_yandex:proc_linux [2023/11/13 11:54] – создано Администратор | devops_training_in_yandex:proc_linux [2023/11/13 14:10] (текущий) – Администратор | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== Выполнение домашнего задания " | ====== Выполнение домашнего задания " | ||
| - | ===== Задание ===== | + | ====== Задание |
| - | < | + | < |
| - | Шаг 1 | + | **Шаг 1**\\ |
| - | О текущем процессе: | + | - О текущем процессе: |
| - | Кол-во дескрипторов | + | |
| - | Потребление памяти | + | |
| - | Путь до исполняемого файла | + | |
| - | О текущей системе: | + | - О текущей системе: |
| - | | + | |
| - | | + | |
| + | - Вывести все в Json | ||
| - | Вывести все в Json | + | **Шаг 2**\\ |
| - | + | Запустить приложение из шага 1 в изоляции при помощи например Docker | |
| - | Шаг 2 | + | *Advanced level запустить руками в cgroup и namespace\\ |
| - | Запустить приложение из шага 1 в изоляции при помощи например Docker | + | Сравнить вывод Json шага 1 и шага 2\\ |
| - | *Advanced level запустить руками в cgroup и namespace | + | |
| - | Сравнить вывод Json шага 1 и шага 2 | + | |
| </ | </ | ||
| + | |||
| + | ====== Решение ====== | ||
| + | ===== Сбор информации о текущем процессе ===== | ||
| + | Для сбора создадим скрипт | ||
| + | < | ||
| + | < | ||
| + | |||
| + | # Получаем PID текущего процесса | ||
| + | PID=$$ | ||
| + | |||
| + | # Получаем количество дескрипторов | ||
| + | FD_COUNT=$(ls / | ||
| + | |||
| + | # Получаем потребление памяти | ||
| + | MEM_USAGE=$(awk '/ | ||
| + | |||
| + | # Получаем путь до исполняемого файла | ||
| + | EXEC_PATH=$(readlink / | ||
| + | |||
| + | # Формируем JSON-объект с собранной информацией | ||
| + | json=' | ||
| + | json+=" | ||
| + | json+=" | ||
| + | json+=" | ||
| + | json+=' | ||
| + | |||
| + | echo $json > proc.json</ | ||
| + | Делаем файл исполняемым | ||
| + | < | ||
| + | Запускаем скрипт | ||
| + | < | ||
| + | Теперь выводим информацию из файла на экран | ||
| + | < | ||
| + | {{: | ||
| + | ===== Сбор информации о текущей системе ===== | ||
| + | Для сбора создадим скрипт | ||
| + | < | ||
| + | < | ||
| + | |||
| + | # Получение информации о процессоре | ||
| + | CPU_INFO=$(lscpu | awk -F':' | ||
| + | CPU_INFO=${CPU_INFO%? | ||
| + | |||
| + | # Получение информации о памяти | ||
| + | MEM_INFO=$(free -h | awk ' | ||
| + | |||
| + | # Получение информации о дисковом пространстве | ||
| + | DISK_INFO=$(df -h --output=size, | ||
| + | |||
| + | # Формирование JSON-объекта | ||
| + | echo "{ \" | ||
| + | Делаем файл исполняемым | ||
| + | < | ||
| + | Запускаем скрипт | ||
| + | < | ||
| + | Теперь выводим информацию из файла на экран | ||
| + | < | ||
| + | {{: | ||
| + | |||
| + | ===== Запуск приложения из шага 1 ===== | ||
| + | В моем случае это оболочка **bash** | ||
| + | Для ее запуска в докере потребуется создать **Dockerfile** с содержимым | ||
| + | < | ||
| + | |||
| + | # Установка необходимых пакетов | ||
| + | RUN apt-get update && apt-get install -y bash | ||
| + | |||
| + | # Копирование скрипта в рабочую директорию образа | ||
| + | COPY collecting_information_about_the_current_process.sh / | ||
| + | COPY collecting_information_about_the_current_system.sh / | ||
| + | |||
| + | # Установка разрешений для выполнения скрипта | ||
| + | RUN chmod +x / | ||
| + | RUN chmod +x / | ||
| + | |||
| + | # Запуск скрипта при старте контейнера | ||
| + | CMD ["/ | ||
| + | CMD ["/ | ||
| + | Теперь собираем приложение | ||
| + | < | ||
| + | Запускаем и сразу попадаем в терминал контейнера | ||
| + | < | ||
| + | Проверяем скопировались ли скрипты | ||
| + | < | ||
| + | Видим что они появились | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ===== Запуск руками в cgroup ===== | ||
| + | Выполняем команду с нужным вам PID | ||
| + | < | ||
| + | Проверяем что вы в cgroup командой | ||
| + | < | ||
| + | |||