crontab shell脚本监控rabbitMQ消费者是否运行(未运行自启动)

shell监控脚本准备(test文件位置:/data/wwwroot/default/check_php_runing.sh):

#!/bin/sh
pro=$(ps -ef | grep $1 |grep -v grep | grep -v "$0")
#过滤出目标进程信息,如果pro为空串说明目标进程未运行
#反向过滤掉grep进程 和 本进程信息, 因为这两个进程信息中包含目标进程的名字
if [ -z "$pro" ]
then
echo "$(date):$1程序未启动,重新启动程序"
"/usr/local/php/bin/php" $1
else
echo "$(date):$1程序正在运行"
fi
 
sleep 0.5

假设被监控php消费者程序如下(test文件位置:/data/wwwroot/default/rabbitmq_consumer.php):

<?php
//以下为仅为测试链接用脚本,实际业务场景应严谨应封装后使用
//声明连接参数
$config = array(
    'host' => '127.0.0.1',
    'vhost' => '/',
    'port' => 5672,
    'login' => 'admin',
    'password' => 'admin'
);
//连接broker
$cnn = new AMQPConnection($config);
if (!$cnn->connect()) {
    echo "Cannot connect to the broker";
    exit();
}
//在连接内创建一个通道
$ch = new AMQPChannel($cnn);
//创建一个交换机
$ex = new AMQPExchange($ch);
//声明路由键 和消息发送方一致
$routingKey = 'key_1';
//声明交换机名称 和消息发送方一致
$exchangeName = 'exchange_1';
//设置交换机名称
$ex->setName($exchangeName);
//设置交换机类型
//AMQP_EX_TYPE_DIRECT:直连交换机
//AMQP_EX_TYPE_FANOUT:扇形交换机
//AMQP_EX_TYPE_HEADERS:头交换机
//AMQP_EX_TYPE_TOPIC:主题交换机
$ex->setType(AMQP_EX_TYPE_DIRECT);
//设置交换机持久
$ex->setFlags(AMQP_DURABLE);
//声明交换机
$ex->declareExchange();
//创建一个消息队列
$q = new AMQPQueue($ch);
//设置队列名称
$q->setName('queue_1');
//设置队列持久化
$q->setFlags(AMQP_DURABLE);
//声明消息队列
//echo 'Message Total: ' .$q->declareQueue()."\n";
//交换机和队列通过$routingKey进行绑定
//echo 'Queue Bind: ' .$q->bind($ex->getName(), $routingKey)."\n";
//接收消息并进行处理的回调方法
function receive($envelope, $queue) {
    //休眠两秒,
    //sleep(2);
    //echo消息内容
    //echo $envelope->getBody()."\n";
    //显式确认,队列收到消费者显式确认后,会删除该消息
    $queue->ack($envelope->getDeliveryTag());
}
//设置消息队列消费者回调方法,并进行阻塞
while (true) {
    $q->consume("receive");
    //$q->consume("receive", AMQP_AUTOACK);//隐式确认,不推荐
}
$cnn->disconnect();

以下为test用发送程序如下:

<?php

$config = array(
    'host' => '127.0.0.1',
    'vhost' => '/',
    'port' => 5672,
    'login' => 'admin',
    'password' => 'admin'
);
$cnn = new AMQPConnection($config);
if (!$cnn->connect()) {
    echo "Cannot connect to the broker";
    exit();
}
$ch = new AMQPChannel($cnn);
$ex = new AMQPExchange($ch);
//消息的路由键,一定要和消费者端一致
$routingKey = 'key_1';
//交换机名称,一定要和消费者端一致,
$exchangeName = 'exchange_1';
$ex->setName($exchangeName);
//直连交换机
$ex->setType(AMQP_EX_TYPE_DIRECT);
//交换机持久化
$ex->setFlags(AMQP_DURABLE);
$ex->declareExchange();
//创建10个消息
$ch->startTransaction(); //开始事务

for ($i=1;$i<=20;$i++){
    //消息内容
    $msg = array(
        'data'  => 'message_'.$i,
        'hello' => 'world',
    );
    //发送消息到交换机,并返回发送结果
    //delivery_mode:2声明消息持久,持久的队列+持久的消息在RabbitMQ重启后才不会丢失
    echo "Send Message:".$ex->publish(json_encode($msg), $routingKey, AMQP_NOPARAM, array('delivery_mode' => AMQP_DURABLE))."\n";
    //代码执行完毕后进程会自动退出
}
//$ch->rollbackTransaction();//回滚事务
$ch->commitTransaction(); //提交事务
$cnn->disconnect();

crontab 监控项如下(每分钟检测依次,也可用于其它脚本的监控项,只需要更换被监控文件全路径名即可):

#监控并记录日志...
* * * * * sh /data/wwwroot/default/check_php_runing.sh /data/wwwroot/default/rabbitmq_consumer.php >> /data/wwwroot/default/check_php_rabbitmq_consumer.log
#crontab时间格式依次是(分、时、日、月、周)
#每1分钟执行一次command脚本 
* * * * * command

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值