DevOps | Вопросы собесов
5.2K subscribers
32 photos
824 links
Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp

Тесты t.me/+2P7cpjeyfDVlZjcy
Вакансии t.me/+i5KFWEWJ21hhYWEy
Download Telegram
🤔 Как поднять лимиты nginx?

Можно увеличить несколько лимитов, связанных как с самой конфигурацией Nginx, так и с настройками операционной системы.

🚩Шаги

🟠Увеличение лимита открытых файлов

1⃣Проверка текущих лимитов
ulimit -n


2⃣Увеличение лимитов для пользователя
* soft nofile 65536
* hard nofile 65536


3⃣Применение изменений
Перезапустите терминал или перезагрузите систему, чтобы изменения вступили в силу.

4⃣ Установка лимитов для процессов Nginx
LimitNOFILE=65536

sudo systemctl daemon-reload


🟠Настройка параметров Nginx

1⃣Редактирование основного конфигурационного файла Nginx
Откройте файл конфигурации Nginx (обычно /etc/nginx/nginx.conf) и настройте следующие параметры:

worker_rlimit_nofile: Установите максимальное количество открытых файлов.
worker_rlimit_nofile 65536;


worker_connections: Увеличьте количество соединений, которые каждый рабочий процесс может обрабатывать одновременно.
events {
worker_connections 65536;
}


worker_processes: Настройте количество рабочих процессов. Обычно это число соответствует количеству ядер процессора.
worker_processes auto;


🟠Настройка системных параметров

1⃣Увеличение лимита открытых файлов в системе
Отредактируйте файл /etc/sysctl.conf и добавьте строку
fs.file-max = 2097152


Примените изменения
sudo sysctl -p


2⃣Настройка TCP-параметров
Отредактируйте файл /etc/sysctl.conf и добавьте строки
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 4096


Примените изменения
sudo sysctl -p


🟠Перезагрузка Nginx
После внесения всех изменений перезагрузите Nginx для их применения:
sudo systemctl restart nginx


Пример конфигурационного файла Nginx
user nginx;
worker_processes auto;
worker_rlimit_nofile 65536;

events {
worker_connections 65536;
}

http {
include mime.types;
default_type application/octet-stream;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/conf.d/*.conf;
}


🚩Проверка изменений

Проверка лимита открытых файлов
ulimit -n


Проверка параметров sysctl
sysctl fs.file-max
sysctl net.core.somaxconn
sysctl net.ipv4.tcp_max_syn_backlog


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
🤔 Что такое ELK?

ELK стек — это сочетание трех открытых инструментов Elasticsearch, Logstash и Kibana, которые вместе используются для индексации, анализа и визуализации логов в реальном времени. Elasticsearch используется как поисковая и аналитическая движущая сила, Logstash — для обработки и передачи данных, а Kibana — для визуализации данных из Elasticsearch.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥71
🤔 Как и где посмотреть логи какого-нибудь сервиса?

Обычно хранятся в каталоге /var/log. Также многие современные дистрибутивы используют систему журналирования systemd для управления и просмотра логов.

🚩Способы просмотра

🟠Просмотр логов в /var/log
Каталог /var/log содержит логи большинства системных сервисов и приложений.

Логи системных сообщений
/var/log/syslog: Содержит общие системные логи. /var/log/messages: Содержит общие системные сообщения (не во всех дистрибутивах).
cat /var/log/syslog
less /var/log/syslog
tail -f /var/log/syslog


Логи конкретных сервисов
Apache: /var/log/apache2/ или /var/log/httpd/ Логи доступа: /var/log/apache2/access.log или /var/log/httpd/access_log Логи ошибок: /var/log/apache2/error.log или /var/log/httpd/error_log
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/error.log


Nginx: /var/log/nginx/ Логи доступа: /var/log/nginx/access.log Логи ошибок: /var/log/nginx/error.log
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log


MySQL: /var/log/mysql/ или /var/log/mysqld.log
tail -f /var/log/mysql/error.log 


SSH: /var/log/auth.log или /var/log/secure
tail -f /var/log/auth.log 


🟠Использование `journalctl` для системных логов
journalctl — это утилита для просмотра и управления журналами systemd. Она позволяет фильтровать логи по различным критериям, таким как время, сервис и уровень логирования.

Основные команды journalctl
Просмотр всех журналов
journalctl  



Логов конкретного сервиса
journalctl -u nginx.service  


Последних логов и продолжение просмотра в реальном времени
journalctl -f
journalctl -u nginx.service -f


Логов за определённый период
journalctl --since "2024-07-25 12:00:00" --until "2024-07-25 13:00:00" 


Логов с определённым уровнем логирования
journalctl -p err
journalctl -p warning


🚩Примеры использования

🟠Просмотр логов Apache
Логи доступа
tail -f /var/log/apache2/access.log  


Логи ошибок
tail -f /var/log/apache2/error.log 


🟠Просмотр логов Nginx
Логи доступа
tail -f /var/log/nginx/access.log


Логи ошибок
tail -f /var/log/nginx/error.log  


🟠Использование `journalctl` для просмотра логов Nginx
Все логи Nginx
journalctl -u nginx.service  


Последние логи Nginx в реальном времени
journalctl -u nginx.service -f  


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🤔 Что такое и нужен ли swap?

Swap (файл подкачки) — это область на жестком диске, используемая операционной системой для временного хранения данных из оперативной памяти (RAM), когда она заполнена. Swap может помочь системе справляться с перегрузкой памяти, но использование swap может замедлить работу системы, так как доступ к данным на жестком диске медленнее, чем к RAM.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
🤔 Как открывается смотреть огромный лог размером 4-5 Гб?

Работа с большими логами может быть сложной, так как стандартные текстовые редакторы и команды могут не справляться с такими объемами данных.

🟠Использование команды `less`
Это команда для постраничного просмотра файлов, которая загружает файл по частям, что позволяет работать с большими файлами без их полного открытия в памяти. Навигация:
Space: следующая страница
b: предыдущая страница
G: перейти в конец файла
g: перейти в начало файла
/pattern: поиск по файлу
less /path/to/large-log-file.log


🟠Использование команды tail
Это команда для просмотра последних строк файла. Она полезна для мониторинга новых записей в реальном времени.
tail -n 1000 /path/to/large-log-file.log


Для непрерывного мониторинга
tail -f /path/to/large-log-file.log


🟠Использование команды `head`
Это команда для просмотра первых строк файла.
head -n 1000 /path/to/large-log-file.log


🟠Использование команды `awk`
Это мощный текстовый процессор, который может быть использован для фильтрации и обработки лог-файлов.
awk '/ERROR/' /path/to/large-log-file.log


🟠Использование команды tail
Это команда для поиска по файлу. Она позволяет быстро находить строки, содержащие определенные паттерны.
grep "ERROR" /path/to/large-log-file.log


Для просмотра строк до и после найденного паттерна
grep -C 5 "ERROR" /path/to/large-log-file.log


🟠Использование команды `split`
Это команда для разбиения больших файлов на более мелкие части. Разбиение файла на части размером по 500 МБ
split -b 500M /path/to/large-log-file.log part_


🟠Использование `Sublime Text` или других редакторов с поддержкой больших файлов
Некоторые текстовые редакторы, такие как Sublime Text, поддерживают работу с большими файлами. Они могут быть полезны для просмотра и редактирования логов.

🟠Использование специализированных утилит
GoAccess: интерактивный просмотр логов веб-сервера в режиме реального времени.
goaccess /path/to/access.log -c


lnav: интерактивный просмотрщик логов, который автоматически определяет формат логов и предоставляет удобную навигацию и поиск.
lnav /path/to/large-log-file.log


🚩Примеры использования

Использование less для просмотра большого лог-файла
less /path/to/large-log-file.log


Использование grep для поиска по логу
grep "ERROR" /path/to/large-log-file.log


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🤔 В чём разница между TCP и UDP?

TCP (Transmission Control Protocol) — это протокол с установлением соединения, обеспечивающий надежную, упорядоченную и безошибочную передачу данных. UDP (User Datagram Protocol) — это более простой протокол без установления соединения, который позволяет передавать данные без гарантий доставки, порядка или проверки ошибок. TCP используется для задач, где важна надежность, а UDP — для задач, требующих максимальной скорости передачи.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍181
🤔 Что такое cherry pick?

Это команда в системе контроля версий Git, которая позволяет выбрать отдельные коммиты из одной ветки и применить их к другой ветке. Это полезно, когда вы хотите перенести конкретные изменения (коммиты) в текущую ветку, не выполняя слияние всей ветки.

🚩Когда используется

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

🚩Примеры использования

🟠Простого `cherry-pick`
Перенос одного коммита из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch

# Выполните cherry-pick коммита
git cherry-pick <commit-hash>


🟠Применения нескольких коммитов
Перенос нескольких коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch

# Выполните cherry-pick нескольких коммитов
git cherry-pick <commit-hash-1> <commit-hash-2> <commit-hash-3>


🟠Применения диапазона коммитов
Перенос диапазона коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch

# Выполните cherry-pick диапазона коммитов
git cherry-pick <start-commit-hash>..<end-commit-hash>


🚩Разрешение конфликтов

1⃣Разрешите конфликты в файлах.

2⃣Добавьте изменения в индекс
git add <filename>   


3⃣Завершите процесс cherry-pick
git cherry-pick --continue   


🚩Прерывание

Если вы хотите прервать процесс cherry-pick, можно использовать команду
git cherry-pick --abort


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🤔 По какой причине inode могут закончиться?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥21
🤔 Как отменить последний коммит?

🚩Методы

🟠Отмена последнего коммита с сохранением изменений
Команда git reset с параметром --soft отменяет последний коммит, но оставляет изменения в индексе (staging area), что позволяет вам внести изменения и закоммитить их снова. HEAD~1: указывает на один коммит назад от текущего HEAD. --soft: сохраняет изменения в индексе.
git reset --soft HEAD~1


🟠Отмена последнего коммита с сохранением изменений в рабочей директории
Команда git reset с параметром --mixed отменяет последний коммит и сбрасывает индекс, но сохраняет изменения в рабочей директории. Это позволяет вам внести изменения и добавить их в индекс заново. --mixed: сбрасывает индекс, но сохраняет изменения в рабочей директории (по умолчанию).
git reset --mixed HEAD~1


🟠Отмена последнего коммита и изменений
Команда git reset с параметром --hard отменяет последний коммит и удаляет все изменения как из индекса, так и из рабочей директории. Это действие необратимо и должно использоваться с осторожностью. `--hard`: сбрасывает индекс и рабочую директорию.
git reset --hard HEAD~1


🟠Отмена последнего коммита с помощью `git revert`
Команда git revert создает новый коммит, который отменяет изменения, внесенные последним коммитом. Это сохраняет историю изменений и является более безопасным способом отмены коммита, особенно в публичных ветках. `HEAD`: указывает на последний коммит.
git revert HEAD


🚩Примеры использования

🟠Отмена последнего коммита с сохранением изменений в индексе
git reset --soft HEAD~1    


Проверка состояния:
git status    


🟠Отмена последнего коммита с сохранением изменений в рабочей директории
git reset --mixed HEAD~1    


Проверка состояния
git status    


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
🤔 Зачем эта работа?

Этот вопрос может иметь различные ответы в зависимости от контекста. Если речь идет о DevOps, то такая работа нужна для упрощения процессов разработки, тестирования, развертывания и мониторинга приложений, что в конечном итоге увеличивает скорость и качество выпуска продуктов, а также повышает удовлетворенность и продуктивность команды.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍41
🤔 Как решить конфликты в гите?

Конфликты в Git возникают, когда два или более коммитов изменяют одну и ту же часть файла по-разному, и система контроля версий не может автоматически объединить эти изменения. Решение конфликтов требует ручного вмешательства.

🚩Шаги для разрешения конфликтов

1⃣Идентификация конфликтов
Когда возникает конфликт, Git сообщает о конфликтных файлах после выполнения команды слияния (git merge) или ребейза (git rebase).
git merge feature-branch


Вывод:
Auto-merging filename
CONFLICT (content): Merge conflict in filename
Automatic merge failed; fix conflicts and then commit the result.


2⃣Разрешение конфликтов вручную
Откройте конфликтный файл в текстовом редакторе. Конфликтные изменения помечены специальными маркерами. Удалите маркеры и решите, какие изменения сохранить. Это может быть одно из изменений или комбинация обоих.
<<<<<<< HEAD
# Изменения из текущей ветки
=======
# Изменения из сливаемой ветки
>>>>>>> feature-branch


Пример разрешения конфликта:
# До разрешения конфликта
<<<<<<< HEAD
Старый текст из текущей ветки
=======
Новый текст из feature-branch
>>>>>>> feature-branch

# После разрешения конфликта
Старый текст из текущей ветки
Новый текст из feature-branch


3⃣Добавление исправленных файлов в индекс
После разрешения конфликтов сохраните изменения и добавьте исправленные файлы в индекс:
git add filename


4⃣Завершение слияния или ребейза

🟠Завершение слияния
После добавления исправленных файлов в индекс завершите слияние, выполнив коммит:
git commit


🟠Завершение ребейза
Если вы выполняли ребейз, завершите процесс
git rebase --continue


Если необходимо прервать процесс ребейза
git rebase --abort


🚩Инструменты для упрощения разрешения конфликтов

🟠Встроенные инструменты редакторов
Многие текстовые редакторы, такие как Visual Studio Code, имеют встроенные инструменты для разрешения конфликтов, которые делают процесс более визуальным и удобным.

🟠Инструменты визуального сравнения (Merge tools)
KDiff3, Meld, Beyond Compare и другие инструменты могут помочь визуально сравнить и разрешить конфликты. Установка и настройка инструмента для слияния
git config --global merge.tool meld   


Запуск инструмента для разрешения конфликтов
git mergetool   


🚩Примеры

1⃣Идентификация конфликта
git merge feature-branch   


Вывод
Auto-merging filename
CONFLICT (content): Merge conflict in filename
Automatic merge failed; fix conflicts and then commit the result.


2⃣Откройте файл filename в текстовом редакторе и разрешите конфликт:
# До разрешения конфликта
<<<<<<< HEAD
Старый текст из текущей ветки
=======
Новый текст из feature-branch
>>>>>>> feature-branch

# После разрешения конфликта
Старый текст из текущей ветки
Новый текст из feature-branch


3⃣Добавление исправленного файла в индекс
git add filename   


4⃣Завершение слияния
git commit   


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🤔 Что такое Helm и Helm Charts?

Helm — это менеджер пакетов для Kubernetes, который упрощает развертывание и управление приложениями в кластерах. Helm Charts — это пакеты, содержащие все необходимые ресурсы и конфигурации для развертывания приложений в Kubernetes. Они позволяют параметризовать установку и обеспечивать повторное использование конфигураций через шаблоны.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу Знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥3
Forwarded from Идущий к IT
Твое резюме на HeadHunter — ОК, если ты видишь это.

HeadHunter сравнивает ключевые навыки в твоем резюме и в вакансии и в момент отклика отображает, насколько % ты соответствуешь требованиям.

Специальный бейджик «Подходит по навыкам на 100%» отображается, если соответствие составляет более 60%.

Если при просмотре вакансий ты видишь такой бейджик, это значит, что список навыков в твоем резюме качественно составлен.

Это важный параметр, так как рекрутерам чаще показываются резюме с лучшим соответствием.

О том, как правильно указывать ключевые навыки и оптимизировать свое резюме я уже рассказывал в этом видео
👍1
🤔 Где можно указать переменные в ролях?

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

🟠defaults/main.yml
Переменные, определенные здесь, имеют самый низкий приоритет. Обычно используются для определения значений по умолчанию.
# roles/role_name/defaults/main.yml
some_variable: "default_value"


🟠vars/main.yml
Переменные, определенные здесь, имеют более высокий приоритет, чем переменные из defaults/main.yml. Используются для переменных, которые не должны быть изменены пользователем.
# roles/role_name/vars/main.yml
some_variable: "fixed_value"


🟠tasks/main.yml
Переменные могут быть определены непосредственно в задачах. Переменные, определенные таким образом, будут видны только в контексте этой задачи.
# roles/role_name/tasks/main.yml
- name: Set a variable
set_fact:
temporary_variable: "value"


🟠meta/main.yml
В файле метаданных можно определять зависимости ролей и использовать переменные для их настройки.
# roles/role_name/meta/main.yml
dependencies:
- role: dependency_role
some_variable: "value"


🟠templates/
Переменные могут использоваться в шаблонах Jinja2.
# roles/role_name/templates/template.j2
The value of some_variable is {{ some_variable }}


🟠handlers/main.yml
Переменные могут использоваться в хендлерах для настройки условий запуска.
# roles/role_name/handlers/main.yml
- name: restart service
service:
name: "{{ service_name }}"
state: restarted


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

🚩Пример использования

defaults/main.yml
# roles/nginx/defaults/main.yml
nginx_port: 80


vars/main.yml
# roles/nginx/vars/main.yml
nginx_user: "www-data"


tasks/main.yml
 # roles/nginx/tasks/main.yml
- name: Install Nginx
apt:
name: nginx
state: present

- name: Configure Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf

- name: Start Nginx
service:
name: nginx
state: started
enabled: true


templates/nginx.conf.j2
# roles/nginx/templates/nginx.conf.j2
user {{ nginx_user }};
worker_processes auto;

events {
worker_connections 1024;
}

http {
server {
listen {{ nginx_port }};
server_name localhost;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🤔 Чем отличаются HTTP и HTTPS

HTTP (HyperText Transfer Protocol) передаёт данные без шифрования, что делает соединение уязвимым для перехвата. HTTPS (HyperText Transfer Protocol Secure) использует SSL/TLS для шифрования данных, обеспечивая защиту конфиденциальной информации. Таким образом, HTTPS более безопасен и предпочтителен для передачи чувствительных данных, например, паролей и финансовой информации.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
🤔 Какая иерархия переменных в ролях?

🚩Иерархия переменных в ролях

🟠defaults/main.yml
Переменные с самым низким приоритетом. Используются для значений по умолчанию, которые могут быть переопределены.
🟠vars/main.yml
Переменные с более высоким приоритетом, чем defaults. Используются для значений, которые не должны быть легко изменены пользователем.
🟠Переменные в задачах (tasks)
Переменные, заданные с помощью set_fact в задачах, имеют более высокий приоритет. Также переменные, определенные в локальном контексте задачи.

🚩Общая иерархия переменных

🟠Переменные из роли
defaults/main.yml в роли.
🟠Переменные плейбука
Переменные из vars плейбука.
🟠Переменные инвентаря
Переменные из статического или динамического инвентаря.
🟠Факты Ansible (gathered facts)
Динамически собранные данные о хостах.
🟠Переменные командной строки
Переменные, переданные через командную строку с помощью флага -e.

🚩Пример

defaults/main.yml
# roles/example/defaults/main.yml
example_variable: "default_value"


vars/main.yml
# roles/example/vars/main.yml
example_variable: "vars_value"


Переменная в плейбуке
# playbook.yml
- hosts: all
roles:
- role: example
example_variable: "playbook_value"


Переменная командной строки
ansible-playbook playbook.yml -e "example_variable=command_line_value"


🚩Приоритет переменных

1⃣defaults/main.yml задает example_variable как "default_value".
2⃣vars/main.yml переопределяет это значение на "vars_value".
3⃣Переменная, указанная в плейбуке, переопределяет это значение на "playbook_value".
4⃣Переменная командной строки, переданная при запуске плейбука, переопределяет все предыдущие значения на "command_line_value".

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤔 Что такое ELK?

ELK — это стек программ, состоящий из Elasticsearch, Logstash и Kibana, предназначенный для сбора, хранения и визуализации логов. Elasticsearch хранит и индексирует данные, Logstash собирает и обрабатывает их, а Kibana позволяет визуализировать и анализировать. ELK часто используется для мониторинга и анализа больших объемов данных в реальном времени.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу Знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥3
🤔 Из чего состоит роль из каких папок из каких файлов?

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

🚩Описание каждой папки и файла

🟠defaults/main.yml
Содержит переменные по умолчанию для роли.
# roles/role_name/defaults/main.yml
some_default_variable: "default_value"


🟠files/
Содержит статические файлы, которые можно копировать на удаленные хосты. Пример: roles/role_name/files/myfile.conf

🟠handlers/main.yml
Содержит хендлеры, которые можно вызывать для выполнения действий, таких как перезапуск службы.
# roles/role_name/handlers/main.yml
- name: restart nginx
service:
name: nginx
state: restarted


🟠meta/main.yml
Содержит метаинформацию о роли, такую как зависимости от других ролей.
# roles/role_name/meta/main.yml
dependencies:
- role: another_role


🟠tasks/main.yml
Содержит основной список задач, которые выполняются при использовании роли.
# roles/role_name/tasks/main.yml
- name: Install nginx
apt:
name: nginx
state: present


🟠templates/
Содержит шаблоны Jinja2, которые могут быть использованы для создания конфигурационных файлов с динамическими значениями.
# roles/role_name/templates/nginx.conf.j2
server {
listen 80;
server_name {{ nginx_server_name }};
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}


🟠tests/
Содержит файлы для тестирования роли.
# roles/role_name/tests/test.yml
- hosts: localhost
roles:
- role_name


🟠vars/main.yml
Содержит переменные с высоким приоритетом, используемые в роли.
# roles/role_name/vars/main.yml
some_variable: "value"


🟠README.md
Документация роли, содержащая информацию о том, как использовать роль, примеры и описание переменных.

🚩Пример структуры роли

defaults/main.yml
# roles/nginx/defaults/main.yml
nginx_port: 80


vars/main.yml
# roles/nginx/vars/main.yml
nginx_user: "www-data"


tasks/main.yml
# roles/nginx/tasks/main.yml
- name: Install Nginx
apt:
name: nginx
state: present

- name: Configure Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf

- name: Start Nginx
service:
name: nginx
state: started
enabled: true


templates/nginx.conf.j2
# roles/nginx/templates/nginx.conf.j2
user {{ nginx_user }};
worker_processes auto;

events {
worker_connections 1024;
}

http {
server {
listen {{ nginx_port }};
server_name localhost;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
🤔 Что такое и нужен ли swap

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥6
🤔Что такое системные вызовы и системные сигналы?

🚩Системные вызовы

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

🚩Зачем нужны системные вызовы?

🟠Доступ к ресурсам
Программы могут получить доступ к аппаратным ресурсам, таким как диски, сеть, память и устройства ввода/вывода.
🟠Изоляция
Обеспечивают изоляцию между прикладными программами и аппаратными ресурсами, что повышает безопасность и стабильность системы.
🟠Управление процессами
Позволяют создавать, завершать и управлять процессами.

🚩Примеры системных вызовов

open - Открытие файла.
read - Чтение данных из файла или устройства.
write - Запись данных в файл или устройство.
fork - Создание нового процесса.
exec - Выполнение программы.
kill - Отправка сигнала процессу.
wait - Ожидание завершения дочернего процесса.

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main() {
int fd = open("example.txt", O_RDONLY);
if (fd == -1) {
perror("open");
return 1;
}

char buffer[100];
ssize_t bytesRead = read(fd, buffer, sizeof(buffer));
if (bytesRead == -1) {
perror("read");
return 1;
}

write(STDOUT_FILENO, buffer, bytesRead);
close(fd);
return 0;
}


🚩Системные сигналы

Это механизмы, используемые в Unix-подобных операционных системах для уведомления процессов о различных событиях. Сигналы могут быть отправлены процессом, ядром ОС или пользователем для уведомления о системных событиях или управления процессами.

🚩Зачем нужны системные сигналы?

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

🚩Примеры системных сигналов

SIGINT (2) - Прерывание (обычно отправляется при нажатии Ctrl+C в терминале).
SIGTERM (15) - Завершение процесса.
SIGKILL (9) - Немедленное завершение процесса.
SIGSTOP (19)- Приостановка процесса.
SIGCONT (18) - Возобновление приостановленного процесса.
SIGSEGV (11) - Сегментационная ошибка (доступ к несуществующей памяти).

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void handle_signal(int signal) {
if (signal == SIGINT) {
printf("Caught SIGINT, exiting...\n");
_exit(0);
}
}

int main() {
signal(SIGINT, handle_signal);

while (1) {
printf("Running...\n");
sleep(1);
}

return 0;
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍2