本文目录导读:

我来介绍几种使用Shell脚本监控PHP-FPM进程的方法:
基础进程监控脚本
#!/bin/bash
# PHP-FPM进程监控脚本
PHP_FPM_NAME="php-fpm"
LOG_FILE="/var/log/php-fpm-monitor.log"
# 检查PHP-FPM进程是否运行
check_php_fpm_process() {
local process_count=$(ps aux | grep -v grep | grep "${PHP_FPM_NAME}" | wc -l)
if [ "$process_count" -eq 0 ]; then
echo "$(date): PHP-FPM进程未运行" >> $LOG_FILE
return 1
else
echo "$(date): PHP-FPM运行正常,进程数: $process_count" >> $LOG_FILE
return 0
fi
}
# 自动重启PHP-FPM
restart_php_fpm() {
echo "$(date): 尝试重启PHP-FPM..." >> $LOG_FILE
# 尝试多种方式重启
if command -v systemctl &> /dev/null; then
systemctl restart php*-fpm* 2>/dev/null
elif [ -f /etc/init.d/php*-fpm* ]; then
/etc/init.d/php*-fpm* restart 2>/dev/null
elif command -v service &> /dev/null; then
service php*-fpm* restart 2>/dev/null
fi
# 检查重启结果
if [ $? -eq 0 ]; then
echo "$(date): PHP-FPM重启成功" >> $LOG_FILE
else
echo "$(date): PHP-FPM重启失败" >> $LOG_FILE
fi
}
# 执行监控
check_php_fpm_process
if [ $? -ne 0 ]; then
restart_php_fpm
fi
全面的健康检查脚本
#!/bin/bash
# PHP-FPM健康检查脚本
PHP_STATUS_URL="http://127.0.0.1:9000/status"
PHP_FPM_POOL="/etc/php-fpm.d/www.conf"
LOG_FILE="/var/log/php-fpm-health-check.log"
ALERT_EMAIL="admin@example.com"
# 检查PHP-FPM状态页面
check_status_page() {
if curl -s -o /dev/null -w "%{http_code}" $PHP_STATUS_URL | grep -q 200; then
return 0
else
return 1
fi
}
# 获取PHP-FPM进程统计
get_process_stats() {
local stats=$(ps aux | grep "php-fpm: pool" | wc -l)
local idle=$(ps aux | grep "php-fpm: pool" | grep -i idle | wc -l)
local busy=$(ps aux | grep "php-fpm: pool" | grep -i "process" | wc -l)
echo "总进程数: $stats"
echo "空闲进程: $idle"
echo "忙碌进程: $busy"
}
# 检查CPU和内存使用
check_resource_usage() {
local cpu_usage=$(ps aux | grep php-fpm | grep -v grep | awk '{sum+=$3} END {print sum}')
local mem_usage=$(ps aux | grep php-fpm | grep -v grep | awk '{sum+=$4} END {print sum}')
echo "CPU使用率: $cpu_usage%"
echo "内存使用率: $mem_usage%"
# 检查是否超过阈值
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
echo "警告: CPU使用率过高"
return 1
fi
if (( $(echo "$mem_usage > 80" | bc -l) )); then
echo "警告: 内存使用率过高"
return 1
fi
return 0
}
# 发送告警通知
send_alert() {
local message=$1
if [ -n "$ALERT_EMAIL" ]; then
echo "$message" | mail -s "PHP-FPM告警通知" $ALERT_EMAIL
fi
# 也可以发送到Telegram或其他通知服务
# curl -s -X POST "https://api.telegram.org/botTOKEN/sendMessage" -d "chat_id=CHAT_ID&text=$message"
}
# 主监控函数
monitor_php_fpm() {
local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
echo "=== PHP-FPM监控报告 ===" > $LOG_FILE
echo "时间: $timestamp" >> $LOG_FILE
echo "-------------------" >> $LOG_FILE
# 检查进程状态
if ! check_status_page; then
echo "状态: 异常" >> $LOG_FILE
send_alert "PHP-FPM状态页面无法访问"
restart_php_fpm
else
echo "状态: 正常" >> $LOG_FILE
fi
# 获取进程统计
get_process_stats >> $LOG_FILE
# 检查资源使用
check_resource_usage >> $LOG_FILE
}
monitor_php_fpm
使用Swoole状态检查(如果已安装)
#!/bin/bash
# 使用Swoole查看PHP-FPM状态
check_swoole_status() {
if command -v php &> /dev/null; then
php -r "
\$status = json_decode(file_get_contents('http://127.0.0.1:9000/status?json'), true);
if (\$status) {
foreach (\$status as \$key => \$value) {
echo \"\$key: \$value\n\";
}
} else {
echo '无法获取状态信息\n';
}
"
fi
}
# 生成JSON格式的监控报告
generate_json_report() {
local timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local process_count=$(ps aux | grep "php-fpm: pool" | wc -l)
local cpu_usage=$(ps aux | grep php-fpm | grep -v grep | awk '{sum+=$3} END {print sum}')
local mem_usage=$(ps aux | grep php-fpm | grep -v grep | awk '{sum+=$4} END {print sum}')
echo "{
\"timestamp\": \"$timestamp\",
\"process_count\": $process_count,
\"cpu_usage\": $cpu_usage,
\"memory_usage\": $mem_usage,
\"status\": \"active\"
}"
}
Crontab配置示例
# 每5分钟检查一次 */5 * * * * /usr/local/bin/php-fpm-monitor.sh # 每小时生成一次详细报告 0 * * * * /usr/local/bin/php-fpm-health-check.sh # 每天凌晨重启一次 0 3 * * * systemctl restart php-fpm
高级监控脚本(带性能分析)
#!/bin/bash
# PHP-FPM性能监控脚本
MONITOR_DIR="/var/log/php-fpm-monitor"
PID_FILE="/var/run/php-fpm/php-fpm.pid"
# 创建监控目录
mkdir -p $MONITOR_DIR
# 分析PHP-FPM日志
analyze_php_fpm_logs() {
local log_file="/var/log/php-fpm.log"
local error_count=$(grep -c "ERROR\|WARNING" $log_file 2>/dev/null)
if [ $error_count -gt 0 ]; then
echo "$(date): 检测到 $error_count 个错误/警告" >> $MONITOR_DIR/error.log
# 获取最近10条错误信息
grep "ERROR\|WARNING" $log_file | tail -10 >> $MONITOR_DIR/recent_errors.log
fi
}
# 检查慢请求
check_slow_requests() {
local slow_log="/var/log/php-fpm-slow.log"
if [ -f "$slow_log" ]; then
local slow_count=$(wc -l < $slow_log)
if [ $slow_count -gt 0 ]; then
echo "$(date): 检测到 $slow_count 个慢请求" >> $MONITOR_DIR/slow_requests.log
fi
fi
}
# 生成性能报告
generate_performance_report() {
local report_file="$MONITOR_DIR/performance_$(date +%Y%m%d).log"
echo "=== PHP-FPM性能报告 ===" > $report_file
echo "报告时间: $(date)" >> $report_file
echo "-----------------------------------" >> $report_file
# 获取进程详细信息
ps aux | grep php-fpm | grep -v grep | \
awk '{printf "PID: %s, CPU: %s%%, MEM: %s%%, RSS: %sMB\n", $2, $3, $4, $6/1024}' >> $report_file
echo "-----------------------------------" >> $report_file
analyze_php_fpm_logs
check_slow_requests
}
# 主函数
main() {
echo "$(date): 开始PHP-FPM监控" >> $MONITOR_DIR/monitor.log
# 检查进程是否存在
if [ -f "$PID_FILE" ] && kill -0 $(cat $PID_FILE) 2>/dev/null; then
echo "PHP-FPM进程正常" >> $MONITOR_DIR/monitor.log
generate_performance_report
else
echo "PHP-FPM进程异常" >> $MONITOR_DIR/monitor.log
restart_php_fpm
fi
}
main
使用建议
- 设置合适的检查间隔:根据服务器负载,设置5-15分钟的检查间隔
- 配置告警阈值:根据业务需求调整CPU、内存等阈值
- 保留监控日志:建议保留7-30天的监控记录
- 多重监控方式:结合进程检查、端口检查、状态页面检查
- 自动化恢复:设置自动重启机制,但要避免频繁重启
这些脚本可以根据您的具体需求进行调整和优化。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播