# 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 ![](https://i.imgur.com/6pCg2MB.png) vim ./start-pinger.sh #!/bin/bash sudo -u pinger /lessons/lesson3/pinger.sh & ![](https://i.imgur.com/G87UMUy.png) vim ./stop-pinger.sh #!/bin/bash pkill -F /run/pinger/pinger.pid \ && rm -f /run/pinger/pinger.pid ![](https://i.imgur.com/1w34LeR.png) # Делаем файлы исполняемыми 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: ![](https://i.imgur.com/wOrXt2d.png) # Запускаем: ./start-pinger.sh # Убеждаемся об успешном запуске, главный скрипт запустился под пользователем pinger: ![](https://i.imgur.com/7nZa9Mf.png) # Проверяем наличие pid номера в отдельном файле cat /run/pinger/pinger.pid ![](https://i.imgur.com/CBqCk7m.png) # Проверяем запись вывода скрипта в файл tail -f /var/log/pinger/pinger.log ![](https://i.imgur.com/YnrcW5V.png) # Останавливаем скрипт ./stop-pinger.sh # Убеждаемся что скрипт остановился ps aux | grep pinger ![](https://i.imgur.com/fpIEVMc.png) # Убеждаемся, что скрипт очистил за собой файл pinger.pid ls -la /run/pinger/ ![](https://i.imgur.com/Ml8EnLP.png) # Создаем конфиг для ротирования лог файла vim /etc/logrotate.d/pinger /var/log/pinger/*.log { daily #еждневная проверка условий dateext #добавляет дату конце rotate 4 #хранит последние 4 лога size 2K #максимальный размер лога, чтобы сработала ротация compress #сжимает и архивирует файл delaycompress #последний лог файл не трогает } ![](https://i.imgur.com/xkLbrn0.png) # Для проверки ротации запустим принудительно logrotate logrotate -f /etc/logrotate.d/pinger # Смотрим результат ![](https://i.imgur.com/GglyWgu.png) # Создаем 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 ![](https://i.imgur.com/1Dk3HHO.png) # Сохраняем и перезагружаем deamon systemctl daemon-reload # Пробуем запустить сервис systemctl start pinger # Проверяем статус systemctl status pinger ![](https://i.imgur.com/QyRPDoK.png) ps aux | grep pinger ![](https://i.imgur.com/2Dpw8jM.png) # Проверяем наличие файла pinger.pid и pid номера в нем ![](https://i.imgur.com/36wNZXv.png) # Проверяем наличие записи в pinger.log tail -f /var/log/pinger/pinger.log ![](https://i.imgur.com/vPf2wgm.png) # Останавливаем сервис systemctl stop pinger # Проверяем статус systemctl status pinger ![](https://i.imgur.com/TE1J0OV.png) ps aux | grep pinger ![](https://i.imgur.com/hfHLhpK.png) # Проверяем удаление файла pinger.pid ![](https://i.imgur.com/ncxhTli.png) # Проверяем остановку записи в файл pinger.log ![](https://i.imgur.com/DmXLplM.png)