Можно увеличить несколько лимитов, связанных как с самой конфигурацией Nginx, так и с настройками операционной системы.
ulimit -n
* soft nofile 65536
* hard nofile 65536
Перезапустите терминал или перезагрузите систему, чтобы изменения вступили в силу.
LimitNOFILE=65536
sudo systemctl daemon-reload
Откройте файл конфигурации Nginx (обычно
/etc/nginx/nginx.conf
) и настройте следующие параметры:worker_rlimit_nofile: Установите максимальное количество открытых файлов.
worker_rlimit_nofile 65536;
worker_connections: Увеличьте количество соединений, которые каждый рабочий процесс может обрабатывать одновременно.
events {
worker_connections 65536;
}
worker_processes: Настройте количество рабочих процессов. Обычно это число соответствует количеству ядер процессора.
worker_processes auto;
Отредактируйте файл
/etc/sysctl.conf
и добавьте строкуfs.file-max = 2097152
Примените изменения
sudo sysctl -p
Отредактируйте файл
/etc/sysctl.conf
и добавьте строкиnet.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 4096
Примените изменения
sudo sysctl -p
После внесения всех изменений перезагрузите 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
👍5❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥7❤1
Обычно хранятся в каталоге
/var/log
. Также многие современные дистрибутивы используют систему журналирования systemd
для управления и просмотра логов.Каталог
/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
— это утилита для просмотра и управления журналами 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
Логи доступа
tail -f /var/log/apache2/access.log
Логи ошибок
tail -f /var/log/apache2/error.log
Логи доступа
tail -f /var/log/nginx/access.log
Логи ошибок
tail -f /var/log/nginx/error.log
Все логи Nginx
journalctl -u nginx.service
Последние логи Nginx в реальном времени
journalctl -u nginx.service -f
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Работа с большими логами может быть сложной, так как стандартные текстовые редакторы и команды могут не справляться с такими объемами данных.
Это команда для постраничного просмотра файлов, которая загружает файл по частям, что позволяет работать с большими файлами без их полного открытия в памяти. Навигация:
Space: следующая страница
b: предыдущая страница
G: перейти в конец файла
g: перейти в начало файла
/pattern: поиск по файлу
less /path/to/large-log-file.log
Это команда для просмотра последних строк файла. Она полезна для мониторинга новых записей в реальном времени.
tail -n 1000 /path/to/large-log-file.log
Для непрерывного мониторинга
tail -f /path/to/large-log-file.log
Это команда для просмотра первых строк файла.
head -n 1000 /path/to/large-log-file.log
Это мощный текстовый процессор, который может быть использован для фильтрации и обработки лог-файлов.
awk '/ERROR/' /path/to/large-log-file.log
Это команда для поиска по файлу. Она позволяет быстро находить строки, содержащие определенные паттерны.
grep "ERROR" /path/to/large-log-file.log
Для просмотра строк до и после найденного паттерна
grep -C 5 "ERROR" /path/to/large-log-file.log
Это команда для разбиения больших файлов на более мелкие части. Разбиение файла на части размером по 500 МБ
split -b 500M /path/to/large-log-file.log part_
Некоторые текстовые редакторы, такие как 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
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤1
Это команда в системе контроля версий Git, которая позволяет выбрать отдельные коммиты из одной ветки и применить их к другой ветке. Это полезно, когда вы хотите перенести конкретные изменения (коммиты) в текущую ветку, не выполняя слияние всей ветки.
Когда нужно перенести конкретные исправления или функции из одной ветки в другую, не сливая все изменения из исходной ветки.
Когда найденное исправление в одной ветке нужно срочно применить в другой, например, из ветки разработки в ветку релиза.
Когда слияние всей ветки может привести к конфликтам или нежелательным изменениям,
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>
git add <filename>
cherry-pick
git cherry-pick --continue
Если вы хотите прервать процесс
cherry-pick
, можно использовать командуgit cherry-pick --abort
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥2❤1
Команда 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
создает новый коммит, который отменяет изменения, внесенные последним коммитом. Это сохраняет историю изменений и является более безопасным способом отмены коммита, особенно в публичных ветках. `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
👍3❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍4❤1
Конфликты в Git возникают, когда два или более коммитов изменяют одну и ту же часть файла по-разному, и система контроля версий не может автоматически объединить эти изменения. Решение конфликтов требует ручного вмешательства.
Когда возникает конфликт, 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.
Откройте конфликтный файл в текстовом редакторе. Конфликтные изменения помечены специальными маркерами. Удалите маркеры и решите, какие изменения сохранить. Это может быть одно из изменений или комбинация обоих.
<<<<<<< HEAD
# Изменения из текущей ветки
=======
# Изменения из сливаемой ветки
>>>>>>> feature-branch
Пример разрешения конфликта:
# До разрешения конфликта
<<<<<<< HEAD
Старый текст из текущей ветки
=======
Новый текст из feature-branch
>>>>>>> feature-branch
# После разрешения конфликта
Старый текст из текущей ветки
Новый текст из feature-branch
После разрешения конфликтов сохраните изменения и добавьте исправленные файлы в индекс:
git add filename
После добавления исправленных файлов в индекс завершите слияние, выполнив коммит:
git commit
Если вы выполняли ребейз, завершите процесс
git rebase --continue
Если необходимо прервать процесс ребейза
git rebase --abort
Многие текстовые редакторы, такие как Visual Studio Code, имеют встроенные инструменты для разрешения конфликтов, которые делают процесс более визуальным и удобным.
KDiff3
, Meld
, Beyond Compare
и другие инструменты могут помочь визуально сравнить и разрешить конфликты. Установка и настройка инструмента для слияния git config --global merge.tool meld
Запуск инструмента для разрешения конфликтов
git mergetool
git merge feature-branch
Вывод
Auto-merging filename
CONFLICT (content): Merge conflict in filename
Automatic merge failed; fix conflicts and then commit the result.
filename
в текстовом редакторе и разрешите конфликт: # До разрешения конфликта
<<<<<<< HEAD
Старый текст из текущей ветки
=======
Новый текст из feature-branch
>>>>>>> feature-branch
# После разрешения конфликта
Старый текст из текущей ветки
Новый текст из feature-branch
git add filename
git commit
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу Знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥3
Forwarded from Идущий к IT
Твое резюме на HeadHunter — ОК, если ты видишь это.
HeadHunter сравнивает ключевые навыки в твоем резюме и в вакансии и в момент отклика отображает, насколько % ты соответствуешь требованиям.
Специальный бейджик «Подходит по навыкам на 100%» отображается, если соответствие составляет более 60%.
Если при просмотре вакансий ты видишь такой бейджик, это значит, что список навыков в твоем резюме качественно составлен.
Это важный параметр, так как рекрутерам чаще показываются резюме с лучшим соответствием.
О том, как правильно указывать ключевые навыки и оптимизировать свое резюме я уже рассказывал в этом видео
HeadHunter сравнивает ключевые навыки в твоем резюме и в вакансии и в момент отклика отображает, насколько % ты соответствуешь требованиям.
Специальный бейджик «Подходит по навыкам на 100%» отображается, если соответствие составляет более 60%.
Если при просмотре вакансий ты видишь такой бейджик, это значит, что список навыков в твоем резюме качественно составлен.
Это важный параметр, так как рекрутерам чаще показываются резюме с лучшим соответствием.
О том, как правильно указывать ключевые навыки и оптимизировать свое резюме я уже рассказывал в этом видео
👍1
В Ansible переменные могут быть определены в нескольких местах, включая роли. Роли в Ansible организуют задачи и файлы, делая плейбуки более модульными и повторно используемыми.
Переменные, определенные здесь, имеют самый низкий приоритет. Обычно используются для определения значений по умолчанию.
# roles/role_name/defaults/main.yml
some_variable: "default_value"
Переменные, определенные здесь, имеют более высокий приоритет, чем переменные из
defaults/main.yml
. Используются для переменных, которые не должны быть изменены пользователем.# roles/role_name/vars/main.yml
some_variable: "fixed_value"
Переменные могут быть определены непосредственно в задачах. Переменные, определенные таким образом, будут видны только в контексте этой задачи.
# roles/role_name/tasks/main.yml
- name: Set a variable
set_fact:
temporary_variable: "value"
В файле метаданных можно определять зависимости ролей и использовать переменные для их настройки.
# roles/role_name/meta/main.yml
dependencies:
- role: dependency_role
some_variable: "value"
Переменные могут использоваться в шаблонах Jinja2.
# roles/role_name/templates/template.j2
The value of some_variable is {{ some_variable }}
Переменные могут использоваться в хендлерах для настройки условий запуска.
# roles/role_name/handlers/main.yml
- name: restart service
service:
name: "{{ service_name }}"
state: restarted
В файлах, используемых в задачах копирования или шаблонизации, можно использовать переменные для указания пути к файлам или другим параметрам.
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
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
Переменные с самым низким приоритетом. Используются для значений по умолчанию, которые могут быть переопределены.
Переменные с более высоким приоритетом, чем
defaults
. Используются для значений, которые не должны быть легко изменены пользователем.Переменные, заданные с помощью
set_fact
в задачах, имеют более высокий приоритет. Также переменные, определенные в локальном контексте задачи.defaults/main.yml
в роли.Переменные из
vars
плейбука.Переменные из статического или динамического инвентаря.
Динамически собранные данные о хостах.
Переменные, переданные через командную строку с помощью флага
-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"
defaults/main.yml
задает example_variable
как "default_value"
.vars/main.yml
переопределяет это значение на "vars_value"
."playbook_value"
."command_line_value"
.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу Знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥3
Роль в Ansible состоит из набора папок и файлов, которые организуют задачи, переменные, файлы конфигурации, шаблоны и другие ресурсы, необходимые для выполнения конкретной роли.
Содержит переменные по умолчанию для роли.
# roles/role_name/defaults/main.yml
some_default_variable: "default_value"
Содержит статические файлы, которые можно копировать на удаленные хосты. Пример:
roles/role_name/files/myfile.conf
Содержит хендлеры, которые можно вызывать для выполнения действий, таких как перезапуск службы.
# roles/role_name/handlers/main.yml
- name: restart nginx
service:
name: nginx
state: restarted
Содержит метаинформацию о роли, такую как зависимости от других ролей.
# roles/role_name/meta/main.yml
dependencies:
- role: another_role
Содержит основной список задач, которые выполняются при использовании роли.
# roles/role_name/tasks/main.yml
- name: Install nginx
apt:
name: nginx
state: present
Содержит шаблоны 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;
}
}
Содержит файлы для тестирования роли.
# roles/role_name/tests/test.yml
- hosts: localhost
roles:
- role_name
Содержит переменные с высоким приоритетом, используемые в роли.
# roles/role_name/vars/main.yml
some_variable: "value"
Документация роли, содержащая информацию о том, как использовать роль, примеры и описание переменных.
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❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
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