rubric/modules/linuxmodules/linux_logs.go
2026-07-21 14:52:55 +03:00

175 lines
8.2 KiB
Go
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package linuxmodules
import (
"rubric/utils"
)
var LogsModule = Module{
Key: "logs",
Aliases: []string{"l", "cron", "логи"},
Title: "Логирование и планировщики",
Description: "Темы 3637: rsyslog, journald, cron, at",
Run: showLogs,
}
func showLogs() {
utils.Header("Linux — Логирование и планировщики задач")
// ─── 36. Логирование ──────────────────────────────────────────
utils.Section("36. Логирование")
utils.Println("В современных системах логирование — двухуровневое:")
utils.Println("journald (systemd) + rsyslog/syslog (традиционный)")
utils.Println(utils.ColorBold + "\nОсновные лог-файлы в /var/log/:" + utils.ColorReset)
utils.Code(`/var/log/syslog — общий системный лог (Debian/Ubuntu)
/var/log/messages — общий системный лог (RHEL/Fedora)
/var/log/auth.log — аутентификация, sudo, ssh (Debian)
/var/log/secure — аутентификация (RHEL)
/var/log/kern.log — сообщения ядра
/var/log/dmesg — сообщения при загрузке
/var/log/boot.log — процесс загрузки
/var/log/cron — задания cron
/var/log/mail.log — почтовый сервер
/var/log/nginx/ — access.log, error.log
/var/log/apache2/ — access.log, error.log
/var/log/mysql/ — error.log
/var/log/dpkg.log — установка пакетов (Debian)
/var/log/dnf.log — установка пакетов (RHEL)
/var/log/wtmp — история входов (last для чтения)
/var/log/btmp — неудачные попытки входа (lastb)
/var/log/lastlog — последний вход каждого пользователя`)
utils.Println(utils.ColorBold + "Работа с логами:" + utils.ColorReset)
utils.Command("tail -f /var/log/syslog", "следить за системным логом")
utils.Command("tail -n 100 /var/log/auth.log", "последние 100 строк лога входов")
utils.Command("grep 'ERROR' /var/log/nginx/error.log", "ошибки nginx")
utils.Command("grep -i 'failed' /var/log/auth.log", "неудачные входы")
utils.Command("zcat /var/log/syslog.1.gz", "читать сжатый архивный лог")
utils.Command("zgrep 'error' /var/log/syslog.*.gz", "поиск в архивных логах")
utils.Command("last", "история входов в систему")
utils.Command("lastb", "неудачные попытки входа (root)")
utils.Command("lastlog", "последний вход каждого пользователя")
utils.Println(utils.ColorBold + "\nrsyslog — конфигурация:" + utils.ColorReset)
utils.Code(`# Конфиг: /etc/rsyslog.conf и /etc/rsyslog.d/*.conf
# Формат правил: facility.priority назначение
# Facility (источник):
auth, authpriv — аутентификация
cron — планировщик
daemon — системные демоны
kern — ядро
mail — почта
user — пользовательские программы
local0..local7 — зарезервированы для своего использования
* — все
# Priority (уровень, по возрастанию важности):
debug, info, notice, warning, err, crit, alert, emerg
# Примеры правил:
*.info;mail.none;authpriv.none /var/log/messages # всё кроме mail и auth
authpriv.* /var/log/secure # всё от authpriv
mail.* /var/log/maillog # почта
cron.* /var/log/cron # cron
*.emerg :omusrmsg:* # критичное — всем пользователям
local1.* /var/log/myapp.log # своё приложение
# Перезапустить rsyslog:
sudo systemctl restart rsyslog`)
utils.Println(utils.ColorBold + "logrotate — ротация логов:" + utils.ColorReset)
utils.Code(`# Конфиг: /etc/logrotate.conf и /etc/logrotate.d/*
# Пример /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily # каждый день
missingok # не ошибаться если файл отсутствует
rotate 14 # хранить 14 архивов
compress # сжимать gzip
delaycompress # не сжимать текущий архив
notifempty # не ротировать пустые файлы
create 0640 nginx adm # создать новый файл с правами
sharedscripts
postrotate
nginx -s reopen # сообщить nginx открыть новый файл
endscript
}
# Ручная ротация (тест):
sudo logrotate -d /etc/logrotate.d/nginx # -d = dry run`)
// ─── 37. Планировщики ─────────────────────────────────────────
utils.Section("37. Планировщики задач: cron и at")
utils.Println(utils.ColorBold + "cron — периодические задачи:" + utils.ColorReset)
utils.Code(`# Редактировать crontab текущего пользователя:
crontab -e
# Посмотреть:
crontab -l
# Удалить все задачи:
crontab -r
# Для root:
sudo crontab -e
# Формат строки crontab:
# мин час день_месяца месяц день_недели команда
# 0-59 0-23 1-31 1-12 0-7(0,7=воскресенье)
# Примеры:
* * * * * /script.sh # каждую минуту
0 * * * * /script.sh # каждый час в 0 минут
0 2 * * * /backup.sh # каждый день в 02:00
0 2 * * 0 /weekly.sh # каждое воскресенье в 02:00
0 2 1 * * /monthly.sh # 1-го числа каждого месяца
*/5 * * * * /check.sh # каждые 5 минут
0 9-17 * * 1-5 /work.sh # по будням с 9 до 17
0 2 * * * root /root/backup.sh # в /etc/crontab с указанием пользователя
# Специальные строки:
@reboot /script.sh # при каждой загрузке
@daily /script.sh # раз в день (= 0 0 * * *)
@weekly /script.sh # раз в неделю
@monthly /script.sh # раз в месяц
@yearly /script.sh # раз в год`)
utils.Println(utils.ColorBold + "Системные cron-директории:" + utils.ColorReset)
utils.Code(`/etc/crontab — системный crontab (с полем user)
/etc/cron.d/ — отдельные файлы crontab
/etc/cron.hourly/ — скрипты, запускаемые каждый час
/etc/cron.daily/ — каждый день
/etc/cron.weekly/ — каждую неделю
/etc/cron.monthly/ — каждый месяц
# Поместить скрипт в /etc/cron.daily/:
sudo cp backup.sh /etc/cron.daily/
sudo chmod +x /etc/cron.daily/backup.sh`)
utils.Println(utils.ColorBold + "at — однократные задачи:" + utils.ColorReset)
utils.Code(`# Выполнить команду однократно в указанное время:
at 14:30 # в 14:30 сегодня
at 14:30 tomorrow # завтра в 14:30
at 14:30 July 15 # 15 июля
at now + 1 hour # через час
at now + 30 minutes # через 30 минут
# Ввод команд (Ctrl+D для завершения):
at 02:00
> /usr/local/bin/backup.sh
> Ctrl+D
# Список задач:
atq
at -l
# Удалить задачу:
atrm 5 # удалить задачу №5
# Посмотреть содержимое задачи:
at -c 5`)
utils.Footer()
}