我有4个应用服务器。我想检查所有4个是否已启动并运行,因此我想编写一个脚本,检查所有应用服务器上的进程(无需登录每个脚本并运行脚本)。应用服务器有一个共享文件夹,他们都有权访问,所以我可以在那里放置脚本。 我想找出在所有4个应用服务器上检查这个的最简单/最有效的方法。最初的计划是ssh到每个服务器,但这会要求您输入密码和其他会导致问题的提示。我正在研究使用keygen,但我在服务器上没有主目录,而且我在生成密钥时遇到了问题。 我想知道是否有人可以通过脚本建议最好的方法。哪个更好/更有效,perl或unix?除了keygen之外,我还有其他选择吗? 任何建议将不胜感激。
感谢。
答案 0 :(得分:1)
我使用Perl做了类似的事情。如果您使用Net:SSH:Expect,您可以使用密码打开每台机器的连接,运行命令,检查输出并重复。
这是什么让你开始。 CPAN - Net:SSH:Expect
进入所需机器的示例代码:
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来运行您需要的任何命令。
答案 1 :(得分:0)
您可以在每个执行检查的服务器上运行一个cron作业,当进程不存在时,发送一条消息 - 可以是HTTP请求,电子邮件,无论您喜欢什么。
答案 2 :(得分:0)
无法设置ssh密钥或cron条目;我猜是rsh也出来了。脱离我的头顶;离开期待... http://search.cpan.org/~bnegrao/Net-SSH-Expect-1.09/lib/Net/SSH/Expect.pod
答案 3 :(得分:0)
假设您可以运行脚本,这样的事情就可以了。
#!/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