175 lines
8.2 KiB
Go
Executable file
175 lines
8.2 KiB
Go
Executable file
package linuxmodules
|
||
|
||
import (
|
||
"rubric/utils"
|
||
)
|
||
|
||
var LogsModule = Module{
|
||
Key: "logs",
|
||
Aliases: []string{"l", "cron", "логи"},
|
||
Title: "Логирование и планировщики",
|
||
Description: "Темы 36–37: 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()
|
||
}
|