LINUX.ORG.RU
ФорумAdmin

Как понять, почему исчезает запущенное приложение?

 


1

3

Здравствуйте!

Помогите, пожалуйста, с проблемой.

Есть некое приложение, написанное на golang, которое должно быть запущено постоянно. Почему-то, по прошествии некоторого времени, процесс исчезает. Обычно, это происходит в течение суток после запуска. То есть - несколько раз в сутки, если перезапускать руками.

Я начал пользовать process watcher, который отправляет на почту уведомления, в случае закрытия указанного процесса. Проверил, если руками убить отслеживаемый процесс, то почта приходит. Однако, запуская само приложение и process watcher для его мониторинга, я по прошествии некоторого количества времени (в теч. суток) понимаю, что оба процесса исчезли. И так уже несколько раз.

Само приложение пишет лог о своей работе - ошибок там нет. Просто в один прекрасный момент лог обрывается. В syslog если смотреть по времени, когда обрывается лог приложения - нету ничего связанного.

Как быть? как понять, почему процессы выключаются?

ОС Debian 8 x86_64

P.s. вероятно, стоит сначала понять- какова причина закрытия приложения - внутренная или внешняя. Я допускаю, что там в коде стоит какое-нибудь подавление ошибок вместо вывода в лог, и поэтому возникают непонятки. Но почему исчезает следящий за ним сторонний процесс, вот это загадка.



Последнее исправление: Piter_prbg (всего исправлений: 1)

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

И systemd ещё, кстати. Он как минимум скажет, с каким кодом выходит процесс.

anonymous
()

Приложение может течь и убиваться OOM-киллером. Может ещё какая системная паника, или самая обычная, вроде index out of range.

Посмотри выхлоп dmesg.

Запусти через bash-скрипт:

#!/bin/bash
your_app &> run.log
echo $? >> run.log
anonymous
()

Падает с сегфолтом небось.

anonymous
()

можешь уточнить такой момент: у тебя умирают и процесс и вотчер?

если да, то как именно они запущены.

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

У меня умирает и процесс и вотчер. Умирают ли они одновременно - и связаны ли их выключения между собой - мне не известно.

Процесс запускаю так:

nohup ./myProgram &

Вотчер в последние разы пробовал так:
setsid process_watcher --command myProgram  --to mymail@gmail.com --log --interval 1 --watch-new  >/dev/null 2>&1 </dev/null

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

Ты пробовал запускать нормально, а не так?

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

уж если так хочется, вотчеру делай nohup, а myProgramу - setsid

ckotinko ☆☆☆
()
Ответ на: комментарий от Piter_prbg

есть вариант: запусти сперва какую-нибудь зависающую программу(просто тупо main() { while(1) {} }) с nohup а туда через setsid заатач сперва myProgram, а потом вотчер.

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

туда через setsid заатач

УПРЛС?

anonymous
()

Аноним прав, запусти нормально, хоть в железной консоли, хоть в screen. И посмотри, чем дело кончится, и какой код возврата.

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

Вообще аноним имел в виду запуск в качестве сервиса через systemd. screen, впрочем, тоже сойдёт для разовой диагностики. Но вообще в dmesg надо смотреть, будь то OOM killer или сегфолт.

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

Товарищи, спасибо всем за ответы.
Давайте будем по-порядку делать.
Сейчас я запустил отдельно процесс и отдельно вотчер в разных screen безо всяких извращений.
Жду результата (возможно, долго) и отписываюсь сюда и пробуем остальные варианты.

Piter_prbg
() автор топика

Я начал пользовать process watcher

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

Затем используй gdb app core твоего процесса и дай команду bt full, для получения бактрейса.

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

Пока сдох только процесс вотчер:

 Started: Tue, Mar 06 15:33:06
 Memory (current/peak) - Resident: 11,404 / 11,404 kB   Virtual: 506,520 / 506,520 kB
dTraceback (most recent call last):
  File "/usr/local/bin/process_watcher", line 165, in <module>
    for pid in process_matcher.matching(new_processes):
  File "/etc/process-watcher/process/__init__.py", line 237, in matching
    if self.matches(pid):
  File "/etc/process-watcher/process/__init__.py", line 222, in matches
    comm = f.read().rstrip()
ProcessLookupError: [Errno 3] No such process

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

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

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

видимо, да. Ладно, забудем про него.
Пока жду крушения процесса, посоветуйте что-то удобное для мониторинга процессов и уведомлений при падении?

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