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:
+118
@@ -2,6 +2,7 @@
|
||||
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
|
||||
|
||||
$SUB_PATH = 'sub'; // 订阅路径
|
||||
$CHECK_NEZHA = false; // 控制是否检测哪吒进程,false关闭,true开启,默认关闭
|
||||
|
||||
// 命令执行函数
|
||||
function executeScript($script) {
|
||||
@@ -88,8 +89,125 @@ switch ($path) {
|
||||
}
|
||||
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:
|
||||
http_response_code(404);
|
||||
echo "404 Not Found";
|
||||
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