мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| devops_training_in_yandex:proc_linux [2023/11/13 11:57] – Администратор | devops_training_in_yandex:proc_linux [2023/11/13 14:10] (текущий) – Администратор | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== Выполнение домашнего задания " | ====== Выполнение домашнего задания " | ||
| - | ===== Задание ===== | + | ====== Задание |
| < | < | ||
| - | **Шаг 1** | + | **Шаг 1**\\ |
| - О текущем процессе: | - О текущем процессе: | ||
| * Кол-во дескрипторов | * Кол-во дескрипторов | ||
| Строка 13: | Строка 13: | ||
| - Вывести все в Json | - Вывести все в Json | ||
| - | **Шаг 2** | + | **Шаг 2**\\ |
| Запустить приложение из шага 1 в изоляции при помощи например Docker \\ | Запустить приложение из шага 1 в изоляции при помощи например Docker \\ | ||
| *Advanced level запустить руками в cgroup и namespace\\ | *Advanced level запустить руками в cgroup и namespace\\ | ||
| Сравнить вывод Json шага 1 и шага 2\\ | Сравнить вывод 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 командой | ||
| + | < | ||
| + | |||