Chinaunix

标题: 请各位高手帮忙看看,给点主意,多谢! [打印本页]

作者: Shrek618    时间: 2010-05-11 11:13
标题: 请各位高手帮忙看看,给点主意,多谢!
本帖最后由 Shrek618 于 2010-05-13 19:27 编辑

刚接了个工作,公司里面有一个debian linux server 放在B大楼里, 在这上面有一个最重要的应用程序(一个c++ 编写的软件,用来做Eftpos 机器刷卡用的) 公司有一个团队(在大楼A)是24小时工作来远程监控这个软件,确定它是在工作的。 用的应该TCP HAND SHAKE (这个是雇主给我解释的不是很清楚,我会在更新)来确定那个应用程序在工作 (大楼A 的员工不能连接到服务器,就确定这个程序down掉了)。 如果程序不工作了,IT MANAGER (在C楼)会被通知 然后远程从新启动这个程序。 所以我想做个linux shell script 让服务器去自己检测这个tcp hand shake。如果服务器没有从大楼a 得到tcp响应,就运行killall 关闭那个eftpos软件,再从新启动它。 然后我用crontab 命令 每一分钟来执行一次这个脚本。。。。 (写的有点乱,请包涵)

所以,希望各位高手给我点提示,要怎去做。 谢谢了!
作者: lkk2003rty    时间: 2010-05-11 11:20
ps -ef | grep  “进程名” | grep -cv “grep”  判断结果是不是1 以此判断这个程序是不是在跑

比较挫的一个想法
作者: springwind426    时间: 2010-05-11 13:53

  1. 试试可不可以用一个中介

  2. 大楼A的监测机器不停地监测服务器,如果没有响应,就向中介发送一个信息

  3. 服务器不停地询问中介,如果有错误信息,就重启程序

  4. 比如:用邮件来传递
  5. 监测机器监测不到服务器,就发送一个邮件
  6. 服务器定时取邮件,如果有信息,就重启程序

  7. 这只是一个思路
复制代码

作者: Perl_Er    时间: 2010-05-11 14:11
回复 3# springwind426


    建议用perl吧
#  # Like tcp protocol, but with many hosts
# $p = Net:ing->new("syn";
# $p->port_number(getservbyname("http", "tcp");
# foreach $host (@host_array) {
# $p->ping($host);
# }
# while (($host,$rtt,$ip) = $p->ack) {
# print "HOST: $host [$ip] ACKed in $rtt seconds.\n";
# }

作者: Shrek618    时间: 2010-05-12 12:31
springwind426 发表于 2010-05-11 13:53



   
可是这个服务器也是一个邮件和WEB服务器。。。
作者: Shrek618    时间: 2010-05-12 12:34
回复 4# Perl_Er


    PERL真是一点都不懂,如果C++ 和Java能够做的到,请给个思路,我们有专业的编程人员来做。。
作者: Shell_HAT    时间: 2010-05-12 13:09
回复 6# Shrek618


你们“专业的编程人员”没有思路?
作者: ywlscpl    时间: 2010-05-12 13:14

作者: Shrek618    时间: 2010-05-12 18:56
回复 7# Shell_HAT


    不好意思,解释的有点错误,编程的和我们并不是一个公司的。 所以我想要是用SHELL SCRIPT能够完成就最好,如果不行的话那用JAVA和C++ 来做的话,我们就要给一个具体的思路和做法。。。
作者: kwokcn    时间: 2010-05-12 20:10
man一下nc命令吧。
判断nc返回值,根据情况加一下处理即可。
伪码:

  1. func proc()
  2. {
  3.     do something ...
  4. }

  5. nc $IP $PORT -w 3 -z
  6. [ $? -eq 1 ] && proc
复制代码

作者: Shrek618    时间: 2010-05-12 21:45
回复 10# kwokcn


    多谢回复,我试试看。。。
作者: XQKA    时间: 2010-05-13 10:47
TCP HAND SHAKE 太高深了,不懂。
一定要远程监控吗?本地监控,发现异常再通知异地不是很好吗?
作者: Shrek618    时间: 2010-05-13 13:46
服务器不是放在本地的。。。
作者: XQKA    时间: 2010-05-13 16:28
服务器不是放在本地的。。。
Shrek618 发表于 2010-05-13 13:46



    我说的本地就是受控机本身啊。

   寒一个。。。

你的需求很容易解决的,但是你问题的描述比较模糊。有A大楼咋个没有B大楼涅?受控机在哪?主控机在哪?都是什么平台?
网络怎样?有怎样特别的访问限制。还有那个IT manager在哪?在机房的话就叫他盯着屏幕看,闲着也是闲着。
作者: XQKA    时间: 2010-05-13 17:04
或者把启动脚本做成deamon,如果意外中止则自动重启。
作者: Shrek618    时间: 2010-05-13 19:37
我说的本地就是受控机本身啊。

   寒一个。。。

你的需求很容易解决的,但是你问题的描述比 ...
XQKA 发表于 2010-05-13 16:28



    已更新,不好意思,没有说清楚。。。
作者: XQKA    时间: 2010-05-14 09:59
按15楼的方法试试,在脚本里加发邮件到命令,可以起到“通知”相关人员的作用。
你的服务器恰好是邮件服务器,所以使用邮件一定可以的。

/etc/inittab 的格式 看看man inittab
作者: blackold    时间: 2010-05-14 10:01
回复 7# Shell_HAT


   
作者: 颜舞后宫    时间: 2010-05-14 10:18
太专业的问题
作者: Shrek618    时间: 2010-05-14 16:27
按15楼的方法试试,在脚本里加发邮件到命令,可以起到“通知”相关人员的作用。
你的服务器恰好是邮件服务 ...
XQKA 发表于 2010-05-14 09:59



    多谢回复,我试试。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2