Хендлеры (handlers) в контексте программирования и системного администрирования представляют собой функции или процедуры, которые отвечают на определенные события или сигналы. Могут использоваться в различных областях, таких как обработка сигналов в операционных системах, обработка событий в графических интерфейсах пользователя (GUI), веб-программировании и автоматизации задач.
В этих системах хендлеры часто используются для обработки сигналов, таких как SIGTERM или SIGKILL. Например, если процесс получает сигнал SIGTERM, он может выполнить определенные действия перед завершением.
import signal
import time
# Определение хендлера для сигнала SIGTERM
def handle_sigterm(signum, frame):
print("Received SIGTERM, exiting gracefully...")
exit(0)
# Регистрация хендлера
signal.signal(signal.SIGTERM, handle_sigterm)
# Бесконечный цикл, который будет прерван сигналом
while True:
print("Running...")
time.sleep(1)
В нем хендлеры используются для обработки запросов к веб-серверу. В различных фреймворках, таких как Django или Flask, хендлеры определяются для обработки различных маршрутов и методов HTTP.
from flask import Flask, request
app = Flask(__name__)
# Определение хендлера для GET запроса к корневому маршруту
@app.route('/', methods=['GET'])
def handle_root():
return "Hello, World!"
# Определение хендлера для POST запроса к маршруту /submit
@app.route('/submit', methods=['POST'])
def handle_submit():
data = request.form['data']
return f"Received: {data}"
if __name__ == '__main__':
app.run(debug=True)
В графических интерфейсах пользователя (GUI) хендлеры используются для обработки событий, таких как нажатия кнопок, перемещения мыши или ввода с клавиатуры.
import tkinter as tk
# Определение функции-хендлера для нажатия кнопки
def on_button_click():
print("Button clicked!")
# Создание основного окна
root = tk.Tk()
root.title("Example GUI")
# Создание кнопки и привязка хендлера
button = tk.Button(root, text="Click Me", command=on_button_click)
button.pack()
# Запуск основного цикла приложения
root.mainloop()
Хендлеры
Ansible
В нем хендлеры используются для выполнения задач, которые должны быть запущены только при изменении состояния. Например, перезапуск службы только в случае изменения конфигурационного файла.
- name: Ensure nginx is installed and configured
hosts: webservers
tasks:
- name: Install nginx
apt:
name: nginx
state: present
- name: Copy nginx configuration
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify:
- Restart nginx
handlers:
- name: Restart nginx
service:
name: nginx
state: restarted
Хендлеры — это функции или процедуры, которые обрабатывают определенные события или сигналы в различных контекстах, таких как операционные системы, веб-программирование, графические интерфейсы и автоматизация задач.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Anonymous Quiz
95%
Автоматизированное тестирование изменений кода
1%
Процесс ручного обзора кода
2%
Квартальные развертывания кода
2%
Использование виртуальных машин для разработки
🔥2
Системные вызовы и системные сигналы являются основными механизмами взаимодействия программного обеспечения с операционной системой в Unix и Unix-подобных системах, таких как Linux. Они обеспечивают доступ к аппаратным и программным ресурсам системы и позволяют управлять различными аспектами работы процессов.
Системные вызовы (system calls)
Это интерфейс, предоставляемый операционной системой для выполнения низкоуровневых операций, таких как работа с файловой системой, управление процессами, работа с сетью и управление памятью. Программы вызывают системные вызовы для взаимодействия с ядром операционной системы, которое управляет аппаратными ресурсами.
open()
: открывает файл.read()
: читает данные из файла.write()
: записывает данные в файл.close()
: закрывает файл.fork()
: создает новый процесс путем копирования текущего.exec()
: заменяет текущий процесс новым.wait()
: ожидает завершения дочернего процесса.exit()
: завершает процесс.mmap()
: отображает файл или устройство в память.munmap()
: отменяет отображение памяти.Пример открытия файла, чтения из него и записи в другой файл с использованием системных вызовов:
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main() {
int fd_src, fd_dest;
char buffer[1024];
ssize_t bytes_read, bytes_written;
// Открытие исходного файла
fd_src = open("source.txt", O_RDONLY);
if (fd_src < 0) {
perror("open source.txt");
exit(EXIT_FAILURE);
}
// Открытие (или создание) файла назначения
fd_dest = open("destination.txt", O_WRONLY | O_CREAT, 0644);
if (fd_dest < 0) {
perror("open destination.txt");
close(fd_src);
exit(EXIT_FAILURE);
}
// Чтение и запись данных
while ((bytes_read = read(fd_src, buffer, sizeof(buffer))) > 0) {
bytes_written = write(fd_dest, buffer, bytes_read);
if (bytes_written != bytes_read) {
perror("write");
close(fd_src);
close(fd_dest);
exit(EXIT_FAILURE);
}
}
// Закрытие файлов
close(fd_src);
close(fd_dest);
return 0;
}
Системные сигналы (signals)
Это механизмы асинхронного уведомления процессов о различных событиях. Сигналы могут быть отправлены процессу ядром операционной системы, другим процессом или самим процессом для уведомления о событиях, таких как ошибки, завершение процессов или пользовательские события.
Примеры:
Пример программы, которая обрабатывает сигнал SIGINT (Ctrl+C):
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void handle_sigint(int sig) {
printf("Caught signal %d (SIGINT). Exiting...\n", sig);
exit(0);
}
int main() {
// Установка обработчика сигнала SIGINT
signal(SIGINT, handle_sigint);
// Бесконечный цикл
while (1) {
printf("Running...\n");
sleep(1);
}
return 0;
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Anonymous Quiz
1%
Создание инфраструктуры вручную
97%
Автоматизация создания и управления инфраструктурой
1%
Мониторинг логов приложений
1%
Управление доступом пользователей к системам
👍1
Kubelet — это один из ключевых компонентов Kubernetes, который отвечает за управление состоянием контейнеров на каждом узле кластера. Действует как агент на каждом узле и выполняет задачи, необходимые для поддержания правильного функционирования контейнеров в соответствии с определенными спецификациями.
Основные функции
Может быть настроен через командную строку, конфигурационные файлы или параметры, передаваемые при запуске. Пример конфигурационного файла Kubelet:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
address: 0.0.0.0
readOnlyPort: 10255
cgroupDriver: cgroupfs
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
authentication:
anonymous:
enabled: false
webhook:
enabled: true
x509:
clientCAFile: "/etc/kubernetes/pki/ca.crt"
authorization:
mode: Webhook
Kubelet — это агент, который работает на каждом узле кластера Kubernetes и отвечает за запуск, мониторинг и управление контейнерами в подах. Он взаимодействует с контейнер-рантаймом, выполняет проверки здоровья контейнеров и отправляет информацию о состоянии подов в API Server.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯5👍2
Anonymous Quiz
13%
Развертывание кода непосредственно в продуктивную среду
77%
Тестирование кода в среде, близкой к продуктивной
6%
Разработка новых функций
3%
Архивирование старых версий кода
👍1
Kubelet — это один из ключевых компонентов Kubernetes, который работает на каждом узле кластера и отвечает за управление подами (pods) и контейнерами на этом узле. Он действует как агент, обеспечивая выполнение и поддержание заданного состояния контейнеров.
Основные функции
Может быть настроен через конфигурационные файлы или параметры командной строки. Пример конфигурационного файла Kubelet:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
address: 0.0.0.0
readOnlyPort: 10255
cgroupDriver: cgroupfs
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
authentication:
anonymous:
enabled: false
webhook:
enabled: true
x509:
clientCAFile: "/etc/kubernetes/pki/ca.crt"
authorization:
mode: Webhook
Взаимодействие с другими компонентами Kubernetes
Kubelet — это агент на каждом узле кластера Kubernetes, который управляет подами и контейнерами, следит за их состоянием, взаимодействует с контейнер-рантаймами и обеспечивает выполнение всех необходимых операций для поддержания корректной работы подов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
Роль DevOps (Development Operations), SRE (Site Reliability Engineering) и IE (Infrastructure Engineering) в современном IT заключается в обеспечении надежности, эффективности и масштабируемости разработки, развертывания и поддержки программного обеспечения. Давайте рассмотрим каждую из этих ролей подробнее.
DevOps
Это методология и культура, направленная на тесное сотрудничество между командами разработки (Dev) и эксплуатации (Ops). Цели:
stages:
- build
- test
- deploy
build:
script:
- ./build.sh
test:
script:
- ./run_tests.sh
deploy:
script:
- ./deploy.sh
Этот скрипт описывает этапы сборки, тестирования и развертывания приложения.
SRE
Это подход, разработанный в Google, который фокусируется на обеспечении надежности и стабильности сервисов. Задачи:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'my_application'
static_configs:
- targets: ['localhost:9090']
Этот конфигурационный файл задает интервал сбора метрик и указывает адрес приложения для мониторинга.
IE
Это инженерия инфраструктуры, которая отвечает за проектирование, развертывание и поддержку базовой инфраструктуры для приложений. Основные задачи IE:
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "example-instance"
}
}
Этот скрипт создает виртуальную машину в облаке AWS.
DevOps улучшает взаимодействие и автоматизирует процессы разработки и эксплуатации. SRE фокусируется на надежности и стабильности сервисов. IE проектирует и управляет инфраструктурой для приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍2
Anonymous Quiz
1%
Создание резервных копий данных
97%
Контроль производительности и доступности систем
0%
Управление исходным кодом
2%
Настройка инфраструктуры
Артефакты и кэш в GitLab CI/CD выполняют разные функции и используются для различных целей в контексте выполнения джоб (jobs).
Это выходные данные конкретной джобы, которые сохраняются и могут быть использованы в других джобах или загружены после завершения pipeline. Они предназначены для хранения результатов работы, которые могут понадобиться на следующих этапах или для последующего анализа.
build:
stage: build
script:
- make build
artifacts:
paths:
- build/
expire_in: 1 week
В этом примере выходные файлы, созданные в директории
build/
, сохраняются как артефакты и хранятся в течение одной недели.Это механизм, предназначенный для хранения промежуточных данных, которые могут быть использованы повторно между различными сборками, чтобы ускорить процесс выполнения джоб. Кэш используется для сохранения таких данных, как зависимости или результаты промежуточных шагов сборки, которые часто не меняются.
cache:
paths:
- node_modules/
В этом примере директория
node_modules/
будет кэшироваться, что позволит избежать повторной установки зависимостей при каждом запуске джобы.Артефакты сохраняют выходные данные джоб для использования в других джобах или анализа. Кэш хранит промежуточные данные для ускорения будущих сборок.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3
Основное преимущество systemd заключается в его способности улучшить управление системными службами и процессами в Linux, делая систему более гибкой, эффективной и быстрой. Вот аспекты, делающие systemd важным:
Позволяет загружать и запускать службы параллельно, что значительно ускоряет процесс загрузки системы по сравнению с традиционными системами инициализации, такими как System V init, которые выполняют запуск служб последовательно.
systemctl list-jobs
Эта команда показывает текущие задачи, которые выполняются параллельно при загрузке системы.
Имеет мощный механизм управления зависимостями между службами. Он может определять порядок запуска служб на основе их зависимостей и условий, что позволяет избежать проблем, связанных с неправильным порядком запуска.
[Unit]
Description=My Service
After=network.target
[Service]
ExecStart=/usr/bin/my_service
[Install]
WantedBy=multi-user.target
Здесь указано, что служба
my_service
должна запускаться после network.target
.Предоставляет единый интерфейс для управления системными службами, монтированием файловых систем, запуском и остановкой процессов, а также отслеживанием состояния системы. Все это делается через команду
systemctl
.systemctl start my_service
systemctl stop my_service
systemctl status my_service
Интегрирован с журналированием через journalctl, что позволяет легко отслеживать и анализировать логи служб и системных событий.
journalctl -u my_service
Эта команда выводит логи конкретной службы
my_service
.Поддерживает создание снимков (snapshots) состояния системы, что позволяет сохранять текущее состояние служб и процессов и восстанавливать его при необходимости.
systemctl snapshot my_snapshot
systemctl isolate my_snapshot
Интегрирован с cgroups (control groups), что позволяет управлять и ограничивать ресурсы (CPU, память и т.д.) для отдельных служб и процессов.
[Service]
CPUQuota=20%
MemoryLimit=500M
Этот конфигурационный файл ограничивает использование CPU до 20% и памяти до 500 МБ для конкретной службы.
Может автоматически перезапускать службы в случае их сбоя, а также задавать тайм-ауты для их завершения или запуска.
[Service]
Restart=on-failure
TimeoutStartSec=30
TimeoutStopSec=30
Эти параметры определяют, что служба будет перезапущена при сбое и задают тайм-ауты для ее запуска и остановки.
Ускоряет загрузку системы, улучшает управление зависимостями служб, предоставляет унифицированное управление, улучшает логирование и диагностику, позволяет создавать снимки состояния системы, контролировать ресурсы и автоматически управлять перезапуском служб.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍2
Файл
/etc/fstab
(file system table) содержит информацию о файловых системах и устройствах, которые должны быть автоматически смонтированы при загрузке системы или вручную пользователем. Этот файл используется системными утилитами и скриптами для монтирования файловых систем. /etc/fstab
Каждая строка в
/etc/fstab
описывает одну файловую систему и состоит из шести полей:/dev/sda1
), UUID (уникальный идентификатор устройства) или метка устройства (label)./dev/sda1
UUID=123e4567-e89b-12d3-a456-426614174000
LABEL=mydisk
/
), домашний каталог (/home
) или специальный каталог для временных файлов (/tmp
)./
/home
/mnt/mydisk
ext4
, xfs
, ntfs
, swap
и vfat
.ext4
xfs
ntfs
defaults
, ro
(read-only), rw
(read-write), noexec
(запрещение выполнения файлов) и другие.defaults
noatime
ro
dump
. Значение 0
означает, что резервное копирование не требуется, а 1
означает, что необходимо включить файловую систему в дамп.0
1
fsck
. Значение 0
означает, что проверка не требуется, 1
указывает на корневую файловую систему, а 2
и более — на другие файловые системы, которые должны быть проверены после корневой./etc/fstab
# <файл устройства> <точка монтирования> <тип файловой системы> <параметры> <дамп> <порядок проверки>
UUID=123e4567-e89b-12d3-a456-426614174000 / ext4 defaults 1 1
/dev/sda2 /home ext4 defaults 0 2
/dev/sdb1 /mnt/storage ext4 defaults,noatime 0 2
/dev/sdc1 swap swap defaults 0 0
/
) с типом ext4
и стандартными параметрами, и указывает, что она должна быть проверена первой./dev/sda2
в каталог /home
с типом ext4
и стандартными параметрами./dev/sdb1
в каталог /mnt/storage
с типом ext4
и дополнительным параметром noatime
, который отключает обновление временных меток доступа./dev/sdc1
в качестве подкачки (swap).Файл
/etc/fstab
хранит информацию о файловых системах и их параметрах монтирования, используемых для автоматического или ручного монтирования устройств в систему.Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Anonymous Quiz
9%
Уменьшение времени выполнения тестов
85%
Обеспечение согласованности среды разработки и производства
3%
Ускорение написания кода
2%
Улучшение взаимодействия с пользователями
👍2👾1
HTTPS (HyperText Transfer Protocol Secure) — это расширение HTTP (HyperText Transfer Protocol), которое используется для безопасной передачи данных по сети. Основное отличие HTTPS от HTTP заключается в том, что HTTPS использует SSL/TLS (Secure Sockets Layer / Transport Layer Security) для шифрования данных, что обеспечивает конфиденциальность и целостность передаваемой информации.
Компоненты HTTPS
https://
.HTTPS обеспечивает безопасную передачу данных между клиентом и сервером с помощью шифрования и проверки подлинности.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3👾1
Anonymous Quiz
90%
Docker
3%
Vagrant
6%
Jenkins
0%
Git
👍1
Inode (index node) — это структура данных в файловых системах Unix и Unix-подобных системах (например, Linux), которая хранит информацию о файлах и каталогах, за исключением их имен и содержимого. Каждому файлу или каталогу в файловой системе соответствует свой уникальный inode.
Предоставляет ключевую информацию о файле, которая необходима для его управления и доступа. Это помогает файловой системе эффективно управлять файлами и каталогами.
Основные функции и информация:
Временные метки:
Когда создается файл, файловая система выделяет inode и один или несколько блоков для хранения данных файла. Inode хранит всю информацию о файле, кроме его имени и содержимого. Имя файла хранится в каталоге, который содержит сопоставление имен файлов с их inodes.
Команда
ls -i
показывает номер inode для каждого файла в каталоге:ls -i
Пример вывода:
1234567 file1.txt
1234568 file2.txt
1234569 directory1
Здесь
1234567
, 1234568
и 1234569
— номера inodes для file1.txt
, file2.txt
и directory1
соответственно.Inode хранит метаданные файла и указатели на его содержимое, что позволяет эффективно управлять файлами и каталогами в файловой системе.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Anonymous Quiz
97%
Автоматизация создания и управления инфраструктурой с помощью кода
1%
Ручное управление серверными настройками
1%
Использование виртуальных машин для разработки
0%
Архивирование данных
Inode могут закончиться на файловых системах с фиксированным числом inodes. Это может произойти на различных типах файловых систем, особенно если система выделяет inodes при создании файловой системы и не может динамически изменять их количество. Как это происходит и на каких файловых системах это может случиться:
- mkfs.ext4 -N 100000 /dev/sdX1
Здесь
-N 100000
указывает на создание 100,000 inodes.- newfs -i 8192 /dev/sdX1
Здесь
-i 8192
задает размер inodes.- mkfs.xfs -i maxpct=25 /dev/sdX1
Здесь
-i maxpct=25
задает максимальный процент inodes от общего объема файловой системы.Для проверки текущего использования inodes можно использовать команду
df
с опцией -i
:df -i
Пример вывода:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 1000000 50000 950000 5% /
Здесь видно, сколько inodes всего, сколько из них используется и сколько свободно.
Новые файлы и каталоги не могут быть созданы, даже если на диске еще есть свободное место. Это приводит к ошибкам при попытке создать новые файлы.
Inodes могут закончиться на файловых системах с фиксированным числом inodes, таких как ext2/ext3/ext4, UFS, HFS/HFS+, и XFS. Это ограничение можно избежать, правильно планируя создание файловой системы и мониторя использование inodes.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Anonymous Quiz
10%
Jenkins
15%
GitLab CI/CD
12%
Bamboo
62%
Apache
Провайдеры в Terraform — это плагины, которые позволяют Terraform взаимодействовать с различными облачными платформами, сервисами и другими API. Они определяют наборы ресурсов и операций для взаимодействия с этими сервисами. Каждый провайдер управляет одной или несколькими службами и абстрагирует детали API, предоставляя удобный способ управления инфраструктурой.
Основные функции
Провайдеры определяют типы ресурсов, с которыми можно работать. Например, провайдер для AWS позволяет управлять EC2-инстансами, S3-бакетами и другими сервисами AWS.
Провайдеры обеспечивают взаимодействие с API целевого сервиса. Они обрабатывают запросы и ответы, управляя состоянием ресурсов в соответствии с конфигурацией Terraform.
Провайдеры обычно предоставляют механизмы для аутентификации и авторизации при доступе к сервисам.
Для начала работы с провайдером необходимо его сконфигурировать в файле конфигурации Terraform. Обычно это делается в файле
main.tf
.provider "aws" {
region = "us-west-2"
access_key = "your-access-key"
secret_key = "your-secret-key"
}
В этом примере настраивается провайдер AWS с указанием региона и учетных данных.
После конфигурации провайдера можно определять ресурсы, которые будут управляться с его помощью.
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "example-instance"
}
}
В этом примере создается EC2-инстанс в AWS.
Когда вы запускаете
terraform init
, Terraform загружает и инициализирует провайдеры, указанные в конфигурации.Провайдеры конфигурируются с помощью блока
provider
, где указываются необходимые параметры, такие как учетные данные и регион.При выполнении команд
terraform apply
или terraform plan
Terraform взаимодействует с провайдерами для создания, изменения или удаления ресурсов в соответствии с конфигурацией.provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "example-instance"
}
}
В этом примере провайдер AWS конфигурируется для использования региона
us-west-2
, и затем создается EC2-инстанс с указанными параметрами.Провайдеры в Terraform — это плагины, которые позволяют взаимодействовать с различными облачными платформами и сервисами, определяя ресурсы и операции для управления ими.
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
94%
Контроль версий
2%
Проведение интервью с пользователями
3%
Разработка маркетинговых стратегий
1%
Обучение сотрудников