开机自动启动RabbitMQ消费端

#!/usr/bin/env bash
# +-------------------------------------------------------------------------
# | 启动RabbitMQ消费端
# | 备注①:把当前文件的硬盘路径追加到/etc/rc.d/rc.local文件尾部。
# | 备注②:当前文件需要有执行权限。
# | 备注③:RabbitMQ消费端依赖RabbitMQ服务和MySQL服务(即必须等这两个服务启
# |         动之后再CLI执行PHP脚本)。
# +-------------------------------------------------------------------------

######################### 以下变量请根据实际情况设置·开始 #########################

# PHP可执行文件
php="/program/php/bin/php"

# RabbitMQ的消息消费端(在后台执行)
consumer="/inetpub/wwwroot/www_domain_com/lib/MQConsumer.php"

# MySQL进程的PID文件(上面的PHP脚本依赖MySQL,需要通过PID文件来检查MySQL是否已启动)
mysql_pid="/program/mysql/mysql.pid"

######################### 以下变量请根据实际情况设置·结束 #########################

# 当前时间戳
timestamp_now=$(date '+%s')

# 启动RabbitMQ消费端的时间期限(若干秒后MySQL还未启动就取消启动RabbitMQ消费端)
timestamp_deadline=$((${timestamp_now} + 180))

while [ ${timestamp_now} -le ${timestamp_deadline} ]; do
    # 检查MySQL服务是否已启动
    if [ -f ${mysql_pid} ]; then
        mysql_start="Y"
    else
        mysql_start="N"
    fi

    # 检查RabbitMQ服务是否已启动
    rabbitmq_status=$(/usr/bin/systemctl status rabbitmq.service)
    if [[ ${rabbitmq_status} =~ "Active: active" ]]; then
        rabbitmq_start="Y"
    else
        rabbitmq_start="N"
    fi

    if [ ${mysql_start} == "Y" -a ${rabbitmq_start} == "Y" ]; then
        # 休眠10秒后再启动RabbitMQ的消息消费端
        sleep 10s

        # 启动RabbitMQ的消息消费端(通过“nohup …… >/dev/null 2>&1 &”实现在后台执行)
        nohup ${php} ${consumer} >/dev/null 2>&1 &

        # RabbitMQ的消息消费端启动成功,可以退出while循环
        break
    else
        # 休眠1秒再进行下一轮循环
        sleep 1s

        timestamp_now=$(date '+%s')
    fi
done

停止RabbitMQ消费端的方法
[root@localhost ~]# ps aux | grep php # 查出进程PID
[root@localhost ~]# kill 1628 # 使用kill命令结束进程,其中1628为上面命令查出的进程PID

Copyright © 2023 码农人生. All Rights Reserved