Как убедиться, что приложение работает в Linux - PullRequest
76 голосов
/ 18 ноября 2008

Я пытаюсь убедиться, что скрипт работает на сервере разработки. Он собирает статистику и предоставляет веб-сервис, поэтому он должен сохраняться, но несколько раз в день он умирает по неизвестным причинам. Когда мы замечаем, мы просто запускаем его снова, но это неприятно, и некоторые пользователи не имеют разрешения (или ноу-хау) для его запуска.

Программист во мне хочет потратить несколько часов, чтобы разобраться в проблеме, но занятой человек во мне думает, что должен быть простой способ определить, не запущено ли приложение, и запустить его снова.

Я знаю, что может cron-скрипт ps через grep:

ps -A | grep appname

Но опять же, это еще один час моей жизни, потраченный на создание чего-то, что уже должно существовать ... Разве нет готового приложения, которое я мог бы передать исполняемому файлу (необязательно с аргументами) и которое будет поддерживать процесс на неопределенный срок

В случае, если это что-то меняет, это Ubuntu.

Ответы [ 15 ]

1 голос
/ 18 ноября 2008

Вы можете сделать это службой, запускаемой из inittab (хотя некоторые Linux-ы перешли на что-то более новое в /etc/event.d). Эти встроенные системы позволяют вашей службе работать без написания собственных сценариев или установки чего-то нового.

1 голос
/ 18 ноября 2008

Прежде всего, как вы запустите это приложение? Разветвляется ли он на фоне? Это началось с nohup .. и т. Д.? Если это последнее, проверьте, почему он умер, в nohup.out, если это первое, создайте протоколирование.

Что касается вашего основного вопроса: вы можете создать его или запустить другой процесс в фоновом режиме (не лучший выбор) и использовать pidof в bashscript, достаточно просто:

if [ `pidof -s app` -eq 0 ]; then
    nohup app &
fi
1 голос
/ 18 ноября 2008

Это работа для DMD (демон мониторинга демона). вокруг несколько; но я обычно пишу скрипт, который проверяет, работает ли демон, и запускается, если нет, и помещает его в cron для запуска каждую минуту.

0 голосов
/ 01 июля 2015

Это даже проще:

#!/bin/bash

export DISPLAY=:0

process=processname
makerun="/usr/bin/processname"

if ! pgrep $process > /dev/null
then
    $makerun &
fi

Вы должны помнить, чтобы убедиться, что имя процесса уникально.

0 голосов
/ 25 ноября 2013

Я думаю, что лучшее решение, если вы тоже протестируете функцию. Например, если вам нужно было протестировать Apache, недостаточно только проверить, существуют ли в системах процессы «Apache».

Если вы хотите проверить, подходит ли apache OK, попробуйте загрузить простую веб-страницу и проверить, присутствует ли ваш уникальный код в выводе.

Если нет, убить apache с -9, а затем сделать перезагрузку. И отправьте письмо в корень (который является переадресованным почтовым адресом для корней компании / сервера / проекта).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...