Написание Unix или Perl-скрипта, чтобы проверить, запущен ли процесс - PullRequest
2 голосов
/ 05 июля 2011

У меня есть 4 сервера приложений. Я хочу убедиться, что все 4 запущены и работают, поэтому я хочу написать сценарий, который я проверяю для процесса на всех серверах приложений (без необходимости входа на каждый из них и запуска сценария). Серверы приложений имеют общую папку, к которой у них есть доступ, поэтому я могу разместить скрипт там. Я хочу найти самый простой / эффективный способ проверить это на всех 4 серверах приложений. Первоначально планировалось использовать ssh для каждого из серверов, но затем запрашивался ваш пароль и другие запросы, которые могут вызвать проблемы. Я изучал использование keygen, но у меня нет домашнего каталога на серверах, и у меня были проблемы с генерацией ключей. Я хотел знать, может ли кто-нибудь предложить лучший способ сделать это с помощью сценария. Что будет лучше / эффективнее, perl или unix? Есть ли другие варианты сделать это, что я пропускаю, кроме кейгена? Любой совет будет высоко ценится.

Спасибо.

Ответы [ 4 ]

1 голос
/ 05 июля 2011

Я сделал нечто подобное, используя Perl. Если вы используете Net: SSH: Expect, вы можете открыть соединение с паролем для каждой машины, выполнить ваши команды, проверить вывод и повторить.

Вот с чего вы начнете. CPAN - нетто: SSH: ожидается

Пример кода для доступа к нужной машине:

    my $ssh = Net::SSH::Expect->new(
        host     => $sshHost,
        password => 'password',
        user     => 'username',
        raw_pty  => 1
    );

my $login_output = $ssh->login(); # check if you logged in properly

# disable terminal translations and echo on the SSH server
$ssh->exec("stty raw -echo");

Вы можете вызвать exec для запуска любых необходимых вам команд.

0 голосов
/ 05 июля 2011

Если вы можете запустить скрипт, что-то вроде этого будет работать.

#!/bin/sh
if [ $# -ne 1 ]; then echo "Usage $0: <hispidfile>" >&2; exit 1; fi
read otherpid < $1
if [ "$otherpid" -lt 1 ]; then
  otherpid=""
fi
while :; do
 while kill -0 $otherpid
  do
   sleep 1
  done
 # restart other program
 # (really restarting myself in my peer configuration)
 echo restarting him
 sh -c 'echo $$ > '$1'; echo Him is running for 5 seconds PID=`cat '$1'`; sleep 5;' &
 newpid=0
 while [ "$newpid" -eq "$otherpid" -o "$newpid" -lt 1 ]
  do
   sleep 2
   read newpid < $1
  done
 otherpid=$newpid
done
0 голосов
/ 05 июля 2011

без возможности настройки ключа ssh или записи cron; мое предположение, что rsh также отсутствует. С верхней части моей головы; что уходит, ожидайте ... http://search.cpan.org/~bnegrao/Net-SSH-Expect-1.09/lib/Net/SSH/Expect.pod

0 голосов
/ 05 июля 2011

Вы можете запустить задание cron на каждом сервере, который выполняет проверку, и, когда процесс отсутствует, отправляет сообщение - это может быть HTTP-запрос, электронная почта, что угодно.

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