#!/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
#!/usr/bin/env bash # +------------------------------------------------------------------------- # | 消息队列消费者service脚本 # +------------------------------------------------------------------------- ########## 以下变量根据实际情况修改·开始 ########## PHP='/program/php/bin/php' # PHP程序路径 CONSUMER='/inetpub/wwwroot/www_domain_com/lib/MQConsumer.php' # 消息队列消费者PHP脚本文件路径 REDIS_PIDFILE='/program/redis/redis.pid' # Redis的pid文件路径 MYSQL_PIDFILE='/program/mysql/mysql.pid' # MySQL的pid文件路径 ########## 以下变量根据实际情况修改·结束 ########## # 消费者依赖Redis服务和MySQL服务,如果一段时间之后这两个服务仍未启动,就放弃启动消费者 starttime=$(date +%s) # 开始时间(戳) maximum=600 # 最多尝试600秒 while true; do if [ -e $REDIS_PIDFILE ] && [ -e $MYSQL_PIDFILE ] && [ -e $CONSUMER ]; then /usr/bin/nohup $PHP $CONSUMER >/dev/null 2>&1 & # 启动消费者(屏蔽PHP脚本的一切输出) break # 退出循环 else diff=$(($(date +%s) - starttime)) # 求当前时间与开始时间的时间差 if [ $diff -gt $maximum ]; then break # 退出循环 else sleep 3 fi fi done
Copyright © 2024 码农人生. All Rights Reserved