# lesson 3
# Цель
Практика в:
● понимании системных путей
● расположении файлов приложения в разных частях файловой системы
● создании стартовых скриптов для сервисов
● упаковке приложений в переносимый артефакт
# Задача
Дописать скрипты так, чтобы:
● При запуске start-pinger.sh главный скрипт (pinger.sh) запускался от
пользователя
● Pidfile записывался в /run/pinger/pinger.pid (без участия systemd)
● Логи записывались в /var/log/pinger/pinger.log
Упаковать в архив все необходимые скрипты и каталоги с сохранением путей, владельцев
и прав и прислать архив нам:
● pinger.sh
● start/stop скрипты
● конфиги logrotate
● systemd unit
● все необходимые каталоги
# Критерии оценки
● Упакованы скрипты pinger.sh, start-pinger.sh, stop-pinger.sh, конфиги
logrotate, systemd unit
● Сделаны все перечисленные модификации
● Созданы все необходимые каталоги с нужными пользователем и правами доступа
# Решение:
Напишу сразу, не получилось настроить unit файл, чтобы сервис запускался через start-pinger.sh, сделал запуск через pinger.sh, а так если запускать отдельно start-pinger.sh то он запускает pinger.sh
# Создаем директорию для работы и переходим туда:
mkdir -p /lessons/lesson3/
cd /lessons/lesson3/
# Создаем пользователя pinger
useradd -M pinger (-M, чтобы не создавать домашнюю директорию)
# Создаем 3 файла pinger.sh, start-pinger.sh, stop-pinger.sh
vim ./pinger.sh
#!/bin/bash
while true; do
date >> /var/log/pinger/pinger.log 2>&1 | pgrep pinger > /run/pinger/pinger.pid &
sleep 1
done

vim ./start-pinger.sh
#!/bin/bash
sudo -u pinger /lessons/lesson3/pinger.sh &

vim ./stop-pinger.sh
#!/bin/bash
pkill -F /run/pinger/pinger.pid \
&& rm -f /run/pinger/pinger.pid

# Делаем файлы исполняемыми
chmod +x ./pinger.sh ./start-pinger.sh ./stop-pinger.sh
# Меняем владельца папки и файлов lesson3
chown -R pinger:pinger /lessons/lesson3/
# Создаем директорию и меняем владельца для записи pid номера скрипта в одельный файл
mkdir -p /run/pinger/ | chown -R pinger:pinger /run/pinger/
# Создаем директорию и меняем владельца для записи вывода скрипта в одельный файл
mkdir -p /var/log/pinger | chown -R pinger:pinger /var/log/pinger
# Пробуем запустить и остановить скрипт start-pinger.sh и stop-pinger.sh
# Снала убеждаемся что нет запущенных pinger:

# Запускаем: ./start-pinger.sh
# Убеждаемся об успешном запуске, главный скрипт запустился под пользователем pinger:

# Проверяем наличие pid номера в отдельном файле
cat /run/pinger/pinger.pid

# Проверяем запись вывода скрипта в файл
tail -f /var/log/pinger/pinger.log

# Останавливаем скрипт ./stop-pinger.sh
# Убеждаемся что скрипт остановился
ps aux | grep pinger

# Убеждаемся, что скрипт очистил за собой файл pinger.pid
ls -la /run/pinger/

# Создаем конфиг для ротирования лог файла
vim /etc/logrotate.d/pinger
/var/log/pinger/*.log {
daily #еждневная проверка условий
dateext #добавляет дату конце
rotate 4 #хранит последние 4 лога
size 2K #максимальный размер лога, чтобы сработала ротация
compress #сжимает и архивирует файл
delaycompress #последний лог файл не трогает
}

# Для проверки ротации запустим принудительно logrotate
logrotate -f /etc/logrotate.d/pinger
# Смотрим результат

# Создаем unit файл
vim /etc/systemd/system/pinger.service
[Unit]
Description=Pinger service
After=network.target network-online.target remote-fs.target
[Install]
WantedBy=multi-user.target
[Service]
Type=simple
User=pinger
Group=pinger
EnvironmentFile=-/etc/default/pinger
ExecStart=/lessons/lesson3/pinger.sh
ExecStop=/lessons/lesson3/stop-pinger.sh

# Сохраняем и перезагружаем deamon
systemctl daemon-reload
# Пробуем запустить сервис
systemctl start pinger
# Проверяем статус
systemctl status pinger

ps aux | grep pinger

# Проверяем наличие файла pinger.pid и pid номера в нем

# Проверяем наличие записи в pinger.log
tail -f /var/log/pinger/pinger.log

# Останавливаем сервис
systemctl stop pinger
# Проверяем статус
systemctl status pinger

ps aux | grep pinger

# Проверяем удаление файла pinger.pid

# Проверяем остановку записи в файл pinger.log
