мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
devops_training_in_yandex:proc_linux [2023/11/13 12:01] Администраторdevops_training_in_yandex:proc_linux [2023/11/13 14:10] (текущий) Администратор
Строка 1: Строка 1:
 ====== Выполнение домашнего задания "Процессы Linux" ====== ====== Выполнение домашнего задания "Процессы Linux" ======
-===== Задание =====+====== Задание ======
 <note>При помощи /proc/ /sys/fs собрать информацию:\\ <note>При помощи /proc/ /sys/fs собрать информацию:\\
 **Шаг 1**\\ **Шаг 1**\\
Строка 19: Строка 19:
 </note> </note>
  
-===== Решение ===== +====== Решение ====== 
-==== Сбор информации о текущем процессе ====+===== Сбор информации о текущем процессе =====
 Для сбора создадим скрипт Для сбора создадим скрипт
 <code>nano collecting_information_about_the_current_process.sh</code> <code>nano collecting_information_about_the_current_process.sh</code>
Строка 45: Строка 45:
  
 echo $json > proc.json</code> echo $json > proc.json</code>
 +Делаем файл исполняемым
 +<code>chmod +x collecting_information_about_the_current_process.sh</code>
 +Запускаем скрипт
 +<code>./collecting_information_about_the_current_process.sh</code>
 Теперь выводим информацию из файла на экран Теперь выводим информацию из файла на экран
 <code>cat proc.json</code> <code>cat proc.json</code>
 {{:devops_training_in_yandex:pasted:20231113-150015.png?nolink}} {{:devops_training_in_yandex:pasted:20231113-150015.png?nolink}}
 +===== Сбор информации о текущей системе =====
 +Для сбора создадим скрипт
 +<code>nano collecting_information_about_the_current_system.sh</code>
 +<code>#!/bin/bash
 +
 +# Получение информации о процессоре
 +CPU_INFO=$(lscpu | awk -F':' '{print "\"" $1 "\": \"" $2 "\","}')
 +CPU_INFO=${CPU_INFO%?} # Удаление последней запятой
 +
 +# Получение информации о памяти
 +MEM_INFO=$(free -h | awk 'NR==2{print "\"total_memory\": \""$2"\", \"used_memory\": \""$3"\", \"free_memory\": \""$4"\""}')
 +
 +# Получение информации о дисковом пространстве
 +DISK_INFO=$(df -h --output=size,used,avail,fstype | awk 'NR>1{print "\"filesystem\": \""$4"\", \"total_size\": \""$1"\", \"used\": \""$2"\", \"available\": \""$3"\""}')
 +
 +# Формирование JSON-объекта
 +echo "{ \"system_info\": { $CPU_INFO, $MEM_INFO, $DISK_INFO } }" > sys.json</code>
 +Делаем файл исполняемым
 +<code>chmod +x collecting_information_about_the_current_system.sh</code>
 +Запускаем скрипт
 +<code>./collecting_information_about_the_current_system.sh</code>
 +Теперь выводим информацию из файла на экран
 +<code>cat sys.json</code>
 +{{:devops_training_in_yandex:pasted:20231113-151319.png?nolink}}
 +
 +===== Запуск приложения из шага 1 =====
 +В моем случае это оболочка **bash**
 +Для ее запуска в докере потребуется создать **Dockerfile** с содержимым
 +<code>FROM ubuntu:latest
 +
 +# Установка необходимых пакетов
 +RUN apt-get update && apt-get install -y bash
 +
 +# Копирование скрипта в рабочую директорию образа
 +COPY collecting_information_about_the_current_process.sh /home/collecting_information_about_the_current_process.sh
 +COPY collecting_information_about_the_current_system.sh /home/collecting_information_about_the_current_system.sh
 +
 +# Установка разрешений для выполнения скрипта
 +RUN chmod +x /home/collecting_information_about_the_current_process.sh
 +RUN chmod +x /home/collecting_information_about_the_current_system.sh
 +
 +# Запуск скрипта при старте контейнера
 +CMD ["/bin/bash", "/home/collecting_information_about_the_current_process.sh"]
 +CMD ["/bin/bash", "/home/collecting_information_about_the_current_system.sh"]</code>
 +Теперь собираем приложение
 +<code>docker build -t my-bash .</code>
 +Запускаем и сразу попадаем в терминал контейнера
 +<code>docker run -it my-bash /bin/bash</code>
 +Проверяем скопировались ли скрипты
 +<code>ls /home/</code>
 +Видим что они появились
 +
 +{{:devops_training_in_yandex:pasted:20231113-163336.png?nolink}}
 +
 +===== Запуск руками в cgroup =====
 +Выполняем команду с нужным вам PID
 +<code>nsenter --target <PID> --uts --ipc --net --pid --mount --cgroup -- /bin/bash</code>
 +Проверяем что вы в cgroup командой
 +<code>lsns</code>
 +