LINUX.ORG.RU
решено ФорумAdmin

как определить какой процесс отвалился?

 , , , ,


0

1

upd - как определить какой процесс отвалился?

ответ - когда делаете лапшу на баше - проверяйте её логику, всё просто на самом деле.

всем спасибо кто помог дойти до этой мысли.

★★★★★

Последнее исправление: smilessss (всего исправлений: 10)
Ответ на: комментарий от luke

что ты имеешь ввиду
у меня например 10 процессов с одинаковым именем
раскиданых по 10 директориям
1 падает в середине дня
как обёрткой найти какой упал и перезапустить только его?

smilessss ★★★★★
() автор топика

В рамках твоего костыльного подхода - сделай чтобы были с разным именем (переимнуй в name-1 name-2 итд). А по-нормальному - подозреваю у тебя вообще всё не так и надо переделывать.

firkax ★★★★★
()
Ответ на: комментарий от smilessss
#!/bin/bash

./test
EXIT_CODE=$?
while [[ "$EXIT_CODE" != "0" ]]; do
    echo "Restart test (exit code $EXIT_CODE)"
    ./test
    EXIT_CODE=$?
done
echo "Success (exit code $EXIT_CODE)"

Можно лучше, конечно, я в баше не ахти.

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

Ну наверно у них разные пиды? При запуске пускай каждый процесс пишет в файлик свой пид. А дальше можно погуглить - linux run process with pid

Как минимум пара вариантов:

https://stackoverflow.com/questions/18122592/how-to-set-process-id-in-linux-for-a-specific-program

https://unix.stackexchange.com/questions/131514/run-a-process-to-particular-dedicated-pid-only

chenbr0
()

Что значит «раскиданых по директориям»? Если у процессов должны быть разные рабочие каталоги, то смотрите для каких каталогов есть запущенные процессы по ″readlink /proc/PID/cwd″, для недостающих перезапускайте.

Или пишите скрипт, который вы запускаете вместо процесса, а скрипт запускает нужный процесс и следит...

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

они запускаются через ./
обычные бинарники

что ты предлагаешь запоминать pid и путь запущеного процесса
и сранивать жив ли он каждую минуту
и если не жив то перезапускать процесс по pid

это конечно один из вариантов
но какой-то дикий велосипед

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

сделай чтобы были с разным именем

а если их будет 5000 - как предлагаешь их запускать

вообще всё не так

критикуешь - пердлагай
как бы бы запускал 5000 одинаковых процессов с одинаковым именем и отлеживал бы их активность?

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

./test - тут запускаем сам бинарник


EXIT_CODE=$? - тут какая переменная

while [[ "$EXIT_CODE" != "0" ]]; do - тут в цикле что-то проверяется

    echo "Restart test (exit code $EXIT_CODE)" - тут выдаётся мессадж о рестарте 
    ./test  - тут рестартируем
    EXIT_CODE=$?  - тут чёт присваеивается 
done   - тут цикл заканчивается
echo "Success (exit code $EXIT_CODE)" - тут всё ок

мне кажется такой while на 5000 процессах будет грузить всю систему
smilessss ★★★★★
() автор топика
Последнее исправление: smilessss (всего исправлений: 1)
Ответ на: комментарий от anonymous

у нас тут велосипеды на баше

да и я хз как на systemd отслеживать живучесть 5000 процессав

предлагаешь 5000 юнитов писать с авторестартом?

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

docker

предлагаешь писать 5000 компосов и каждый процесс ещё в докере запускать и 5000 докеров запускать?

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

там плохо написаное приложение на с++
падает из-за переполения буфера

чёт там overloaded и просто сегволтится
но такое поведение только 1-2 бинарников из тысяч
исходники есть, но мне кажется проще написать велосипед по из перезапуску чем что-то пытаться править и искать в этом с++ где оно там сегволтится + там внешние данные могут меняться же, всего ну учтёшь

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

Что значит «раскиданых по директориям»?

значит, что каждый процесс в своей директори находится

readlink /proc/PID/cwd

Да, есть ещё и

pwdx $(pgrep -f some_prosees_name)

но эти подходы не работают
т..к ни readlink ни pwdx не показывают реальное положение вещей

что очень странно

сразу после запуска чтот pwdx что readlink показывает всё верно
но проходит где-то пол дня и там появляются неверные данные
некоторые процессы там в списке отсутсвуют, хотя они запущены и работают 100%

думаю это связано с тем, что сами бинарники на с++ и там логика их работы что они работают потоками и иногда сами перезапускают себя

smilessss ★★★★★
() автор топика
Последнее исправление: smilessss (всего исправлений: 1)
Ответ на: комментарий от xmikex

процесс == бинарник

я уже под вечер поплыл
сори

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

не банальное запускать, ждать wait’ом и рестартить, а тупо взять готовое.

сори под вечер уже не понимаю о чём ты

что ты имел ввиду

я пока как и ты пришёл только к
- запоминием pid и путь при запуске в 1 большой файлик
- как всё запустилось проверяем каждую минуту pid`ы из файлика и pgrep
- если находим разницу - находим строку из файлика с путём бинарника по pid, перезапускаем бинарник
- вроде всё

smilessss ★★★★★
() автор топика
Последнее исправление: smilessss (всего исправлений: 1)
Ответ на: комментарий от smilessss

Так не пиши такой while.

Запуск:

5000 раз:
   перезапускалка &

перезапускалка:

вечный цикл:
  бинарь
  sleep 1

Не решай придуманные тобой проблемы, просто скипни ту часть, где ты их придумываешь.

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

у тебя должен быть bash скрипт из которого все процессы запущены будут и внутри он будет знать pid каждого процесса и по завершению делать перезапуск каждого из процессов.

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

а нет, не всё

нужно придумать как этот большой файл держать в актуальном состоянии т.к. перезапущеные бинарники будут иметь другой pid

и придётся что-то велосипедить, чтобы старый pid менят на новый у перезапущеных бинарников

короче всё очень сложно(

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

Ну оставим тебя самого дозревать до этой идеи. Кому нужны умный рестарт, готовый масс-запуск и останов, зависимости, раздельное логгирование, правда?

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

и по завершению делать перезапуск каждого из процессов.

да но тут возникает проблема
что после перезапуска pid`ы же будут новые
и нужно будет как-то актуализировать информацию о том, с чем собственно сравнивать актаулаьный список процессов

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

тогда идея с systemd не так уж плоха..

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

Не заводи информацию, не придётся актуализовать.

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

после запуска процесса в bash тебе возвращается pid его и ты делаешь wait на этот pid, зачем явно куда-то сохранять данную информацию?

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

упадёт ядро

Не упадёт, если использовать юзерскую сессию.

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

мне решение с

pwdx $(pgrep -f some_prosees_name)

нравится тем
что оно простое

я попытаюсь понять
что там происходит

почему сразу после запуска процессов данные правильные

а потом нет

Это самое топорное решение

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

мне кажется такой while на 5000 процессах будет грузить всю систему

с чего бы вдруг? он же спит.

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

Это самое топорное решение

Только вот задача у тебя на починку капающего крана.

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

(@alpha 5.4 -7)

вот как-то так я вижу 99.9% дистростроения. этот пример отличается от всех моих тем, что не надо ставить себя на мое место — вряд ли кто-то кроме ТСа сочтет его подход привычным или логично откуда-то следующим. не хватает только субд под это, хорошо, что он за помощью вовремя обратился

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

10000 бинарников с одинаковым именем

Как-то всё таинственно, они, наверное, ещё одним и тем же занимаются.

Кмк, можно «перевернуть» всё и использовать очередь задач.

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

Как-то всё таинственно, они, наверное, ещё одним и тем же занимаются.

именно
«мы слишком едины, но слишком отдельно » (с)

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

башелапша проста, пока не становится сложной
на 50000 процессах придется костыль свой комбайн управления в больших портянках

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