mirror of
https://github.com/schroinerxy/Sing-box.git
synced 2026-06-21 20:35:47 +08:00
add keepalive router /status,Process list router /list
This commit is contained in:
+120
-2
@@ -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
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user