服务端口是否正常监控
时间:2006-02-18 来源:weicr
昨天稍有空闲,到原办公室晃晃,见一同事用delphi猛写程序,凑近一看,是写监控排队机服务机端口是否正常的程序————要求一旦发现故障,主动通过 IVR及短信还有现场声乐报警(原由本人开发)。回到自已的办公室后,想想在Linux下解决这个问题相当简单。就用shell即可。
程序要求:周期性监控 10.243.70.1的服务端口 3100 如果有故障(主要是服务停摆),通过socket发字符串到报警接入服务器。我的代码如下:(其他端口均可适用)
checkonline.sh代码
#bash
a=1
while [ $a -eq 1 ]
do
telnet 10.243.70.13100 >/home/oracle/backup/check.log<<CHECK
quit
CHECK
b=`more /home/oracle/backup/check.log|grep 'Connected'|wc -l`
if [ $b -ne 1 ]
then
#socket传送报警字符串,此处要按自己的报警方式来定,有绑定短信的邮箱者可参考我blog中的另一篇文档
/home/oracle/backup/socketsend "1332200(我的手机号码)##排队机服务端口掉线"
fi
sleep 100
done
##linux7.2 下的shell结束
运行nohup /home/oracle/backup/checkonline.sh>/dev/null&
即可
下面是发送字符串到socket服务端的程序 报警接入服务器也开通FTP接入通道,可全完用
shell完成。那也就echo '1332200***#**********'>alert.sms put alert.sms
简单的办法而已。我喜欢用C来写,因为好玩。
socketsend.c
1 #include <ctype.h>
2 #include <sys/types.h>
3 #include <sys/socket.h>
4 #include <netinet/in.h>
5 #define SIZE sizeof(struct sockaddr_in)
6
7 main(argc,argv)
8 int argc;
9 char **argv;
10 { int sockfd,msglength;
11 /*char *teststr="1332200****#kkkk" for debug*/
12 struct sockaddr_in remoteserver;
13 remoteserver.sin_family = AF_INET;
14 remoteserver.sin_addr.s_addr = inet_addr("10.243.70.2");
15 remoteserver.sin_port = htons(4119);/*报警报务器接入端口号*/
16 if((sockfd = socket(AF_INET,SOCK_STREAM,0)) ==-1)
17 {perror("socket call error");
18 exit(1);
19 }
20 if(connect(sockfd,(struct sockaddr *)&remoteserver,SIZE)==-1)
21 {perror("socket connect error");
22 exit(1);
23 }
24 if (argc>1)
25 ++argv;
26 msglength=strlen(*argv);
27 printf("%s\n",*argv);
28 printf("%d\n",msglength);
29 send(sockfd,*argv,msglength,0);
30
31 }
cc -o socketsend socketsend.c
一切工作正常。
程序要求:周期性监控 10.243.70.1的服务端口 3100 如果有故障(主要是服务停摆),通过socket发字符串到报警接入服务器。我的代码如下:(其他端口均可适用)
checkonline.sh代码
#bash
a=1
while [ $a -eq 1 ]
do
telnet 10.243.70.13100 >/home/oracle/backup/check.log<<CHECK
quit
CHECK
b=`more /home/oracle/backup/check.log|grep 'Connected'|wc -l`
if [ $b -ne 1 ]
then
#socket传送报警字符串,此处要按自己的报警方式来定,有绑定短信的邮箱者可参考我blog中的另一篇文档
/home/oracle/backup/socketsend "1332200(我的手机号码)##排队机服务端口掉线"
fi
sleep 100
done
##linux7.2 下的shell结束
运行nohup /home/oracle/backup/checkonline.sh>/dev/null&
即可
下面是发送字符串到socket服务端的程序 报警接入服务器也开通FTP接入通道,可全完用
shell完成。那也就echo '1332200***#**********'>alert.sms put alert.sms
简单的办法而已。我喜欢用C来写,因为好玩。
socketsend.c
1 #include <ctype.h>
2 #include <sys/types.h>
3 #include <sys/socket.h>
4 #include <netinet/in.h>
5 #define SIZE sizeof(struct sockaddr_in)
6
7 main(argc,argv)
8 int argc;
9 char **argv;
10 { int sockfd,msglength;
11 /*char *teststr="1332200****#kkkk" for debug*/
12 struct sockaddr_in remoteserver;
13 remoteserver.sin_family = AF_INET;
14 remoteserver.sin_addr.s_addr = inet_addr("10.243.70.2");
15 remoteserver.sin_port = htons(4119);/*报警报务器接入端口号*/
16 if((sockfd = socket(AF_INET,SOCK_STREAM,0)) ==-1)
17 {perror("socket call error");
18 exit(1);
19 }
20 if(connect(sockfd,(struct sockaddr *)&remoteserver,SIZE)==-1)
21 {perror("socket connect error");
22 exit(1);
23 }
24 if (argc>1)
25 ++argv;
26 msglength=strlen(*argv);
27 printf("%s\n",*argv);
28 printf("%d\n",msglength);
29 send(sockfd,*argv,msglength,0);
30
31 }
cc -o socketsend socketsend.c
一切工作正常。
相关阅读 更多 +