LINUX.ORG.RU
ФорумAdmin

Правильные «костыли» с сервисами

 ,


0

2

Здрасти

Есть оч важный продакшн сервер без бекапа, на котором пришлось поставить весьма неприятный костыль в виде mergefs, чтобы примонтировать в одну папку два рейда. Не спрашивайте зачем, так получилось, а исправить без долгого даунтайма не получится. Честно говоря, жаловаться на mergefs не стану, он работает лучше, чем можно представить - при огромной базе данных с кучей записей, за полгода проблемы были только 2 раза, которые решались перемонтированием и перезапуском сервисов. Так вот, есть скрипт, который выполняет все нужные команды при проблеме, но он пока работает «от руки», а нужно его автоматизировать. Не хочу это делать простым скриптом «while true», ибо сам скрипт может лечь, да и пихать его в автозапуск идея ужасная. Хочецца костыль сделать правильнее, через сервисы systemd. И так, у нас есть софт, nginx и mergefs. При пиковых нагрузках, mergefs начинает жрать весь процессор, а может вообще отвалиться. Нужен сервис, который будет стартовать при запуске и будет следить за состоянием mergefs - в случае проблемы - останавливать софт, отмонтировать mergefs, монтировать все, запускать софт и перезапускать nginx (на всякий случай). Под остановку и перезапуск есть скрипт. Смог его переделать под while true ... if .. ! pidof mergefs .. выполнение перезапуска ... , но не знаю, как правильнее из этого сделать сервис, да и нету случая на высокую нагрузку mergefs. Могу подзадротиться и допилить сервис, но в целях безопасности и самообучения, решил спросить вашего совета и помощи с допиливанием костыля..


Ответ на: комментарий от anonymous

к сожалению, мы живем не в идеальном мире, и ошибки прошлого на продакшн сервере без большого даунтайма не изменить

Datt_
() автор топика
Ответ на: удаленный комментарий

А ну да, точно. Если я использую процессор с операционной системой линукс, нужно говорить детектория :D

Datt_
() автор топика
Ответ на: комментарий от ArcFi

Так проблема в том, что сам mergefs это не сервис, а процесс, и я не могу применить на него OnFailure= или Restart=. Все что я теоретически могу - создать процесс, который будет отслеживать состояние процесса mergefs - к примеру, pidoff mergefs (хотя надо еще как-то размер процесса измерить), и в случае чего, перемонтировать его.

Datt_
() автор топика
Ответ на: комментарий от Datt_

сам mergefs это не сервис, а процесс

Что-то мешает запустить этот процесс через юнит?

процесс, который будет отслеживать состояние процесса mergefs - к примеру, pidoff mergefs

systemd это и делает: процесс дохнет, и автоматически выполняется рестарт юнита.
mergefs кладёте в ExecStart=, а обвязку можно завернуть в ExecStartPre= и ExecStartPost=.

ArcFi
()
Ответ на: комментарий от ArcFi

Этот самый процесс запускается при включении без какого-либо скрипта, просто в fstab есть запись ... fuse.mergerfs ... Подскажете, как все это правильнее сделать?

Datt_
() автор топика
Ответ на: комментарий от Datt_

операционной системой линукс

Нет такой операционной системы

legolegs ★★★★★
()
Ответ на: комментарий от Datt_

В systemd есть что-то для точек монтирования, man systemd.mount и далее. Там предусмотрен случай «монтирование не удалось», но не знаю насчёт «смонтировалось, работало, но сломалось»

legolegs ★★★★★
()
Ответ на: комментарий от Datt_

в fstab есть запись

Есть мнение, что fstab не нужен.
Все свои кастомные маунты уже давно делаю через юниты.

Подскажете, как все это правильнее сделать?

Сделайте юнитом.
Можно поэкспериментировать с типом mount.
Если функциональности окажется недостаточно, то можно использовать тип service, как предлагалось выше:
Правильные «костыли» с сервисами (комментарий)

ArcFi
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.