Заметки администратора

Обновлено: 14 октября 2026

Короткий справочник по задачам, которые чаще всего повторяются на Linux-серверах. Команды проверены на Debian и Ubuntu. Адреса в примерах взяты из диапазонов для документации (192.0.2.0/24, 203.0.113.0/24).

Юниты systemd

Минимальный юнит для собственной службы. Файл кладут в /etc/systemd/system/app.service.

[Unit]
Description=Example application
After=network-online.target
Wants=network-online.target

[Service]
User=app
ExecStart=/usr/local/bin/app --config /etc/app/app.conf
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

После создания или правки файла:

systemctl daemon-reload
systemctl enable --now app
systemctl status app
journalctl -u app --since "1 hour ago"

Для чтения лога в реальном времени добавьте к journalctl ключ -f.

Сокеты и маршруты

Что слушает систему и с кем установлены соединения:

# слушающие TCP-порты и процессы
ss -tlnp

# установленные соединения к порту 22
ss -tn state established '( dport = :22 )'

# сводка по сокетам
ss -s

Адреса, маршруты и счётчики интерфейса:

ip -br addr
ip route
ip -s link show eth0

Если пакеты уходят не туда, начните с ip route get 203.0.113.10: команда покажет, какой маршрут и какой адрес источника будут выбраны.

Шаблоны nginx

Обратный прокси к приложению на локальном порту:

server {
    listen 80;
    server_name example.org;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Ограничение частоты запросов с одного адреса. Зона объявляется в блоке http, а применяется в нужном location:

limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;

location /api/ {
    limit_req zone=perip burst=20 nodelay;
    proxy_pass http://127.0.0.1:3000;
}

Перед перезагрузкой всегда проверяйте синтаксис:

nginx -t && systemctl reload nginx

Резервное копирование

Скрипт делает копию каталога с помощью rsync и удаляет копии старше 14 дней. Сохраните его как /usr/local/bin/backup-www.sh.

#!/usr/bin/env bash
set -euo pipefail

SRC=/var/www/
DST=/backup/www/$(date +%F)

mkdir -p "$DST"
rsync -a --delete "$SRC" "$DST/"
find /backup/www -mindepth 1 -maxdepth 1 -type d -mtime +14 -exec rm -rf {} +

Запуск каждую ночь в 03:30 через crontab -e:

30 3 * * * /usr/local/bin/backup-www.sh >> /var/log/backup-www.log 2>&1

Параметр -mindepth 1 важен: без него find может зацепить и сам каталог /backup/www.