add keepalive router /status,Process list router /list

This commit is contained in:
老王
2025-08-29 12:15:28 +08:00
committed by GitHub
parent 524bc75eed
commit 3aa5cef787
+120 -2
View File
@@ -1,7 +1,8 @@
<?php <?php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$SUB_PATH = 'sub'; // 订阅路径 $SUB_PATH = 'sub'; // 订阅路径
$CHECK_NEZHA = false; // 控制是否检测哪吒进程,false关闭,true开启,默认关闭
// 命令执行函数 // 命令执行函数
function executeScript($script) { function executeScript($script) {
@@ -88,8 +89,125 @@ switch ($path) {
} }
break; break;
case '/status':
header("Content-Type: text/plain; charset=utf-8");
$processStatus = checkProcesses();
if (empty($processStatus['not_running'])) {
echo "All services are running";
} else {
echo "Services not running: " . implode(", ", $processStatus['not_running']) . "\n";
echo "Starting services...\n";
$script = __DIR__ . "/start.sh";
echo executeScript($script);
}
break;
case '/list':
header("Content-Type: text/plain; charset=utf-8");
echo "所有进程列表:\n\n";
$allProcesses = shell_exec("ps aux");
echo $allProcesses . "\n\n";
break;
// case '/debug':
// header("Content-Type: text/plain; charset=utf-8");
// echo "=== 进程匹配测试 ===\n\n";
// global $CHECK_NEZHA;
// echo "CHECK_NEZHA 设置: " . ($CHECK_NEZHA ? 'true' : 'false') . "\n\n";
// // 测试各个匹配模式
// $patterns = [
// 'cloudflared' => 'tunnel.*--edge-ip-version auto',
// 'sing-box' => 'run -c.*config\.json' // sing-box: run -c /路径/config.json
// ];
// // 只在启用时测试nezha
// if ($CHECK_NEZHA) {
// $patterns['nezha v0'] = ':[0-9].* -p'; // nezha v0: 更精确的匹配 - 端口和-p参数组合
// $patterns['nezha v1'] = '-c.*config\.yaml';
// }
// foreach ($patterns as $service => $pattern) {
// echo "$service 模式: $pattern\n";
// $output = [];
// exec("ps aux | grep '$pattern' | grep -v grep", $output);
// if (empty($output)) {
// echo "结果: 未找到\n\n";
// } else {
// echo "结果: 找到 " . count($output) . " 个匹配项\n";
// foreach ($output as $line) {
// echo " $line\n";
// }
// echo "\n";
// }
// }
// echo "3. checkProcesses() 函数结果:\n";
// $result = checkProcesses();
// echo "运行中: " . implode(", ", $result['running']) . "\n";
// echo "未运行: " . implode(", ", $result['not_running']) . "\n";
// break;
default: default:
http_response_code(404); http_response_code(404);
echo "404 Not Found"; echo "404 Not Found";
break; break;
} }
// 进程检查函数
function checkProcess($pattern) {
$command = "ps aux | grep '$pattern' | grep -v grep";
$output = [];
exec($command, $output);
return count($output) > 0;
}
// 检查nezha进程(兼容v0和v1
function checkNezhaProcess() {
// 检查 nezha v0
if (checkProcess(':[0-9].* -p')) {
return true;
}
// 检查 nezha v1
if (checkProcess('-c.*config\.yaml')) {
return true;
}
return false;
}
// 检查所有服务状态
function checkProcesses() {
global $CHECK_NEZHA;
$processes = [
'cloudflared' => 'tunnel.*--edge-ip-version auto',
'sing-box' => 'run -c.*config\.json'
];
$runningProcesses = [];
$notRunningProcesses = [];
// 根据变量决定是否检测nezha
if ($CHECK_NEZHA) {
if (checkNezhaProcess()) {
$runningProcesses[] = 'nezha';
} else {
$notRunningProcesses[] = 'nezha';
}
}
foreach ($processes as $serviceName => $pattern) {
if (checkProcess($pattern)) {
$runningProcesses[] = $serviceName;
} else {
$notRunningProcesses[] = $serviceName;
}
}
return [
'running' => $runningProcesses,
'not_running' => $notRunningProcesses
];
}