From f55b876aa67fb32b766d9eeab055e2c2af2e3f40 Mon Sep 17 00:00:00 2001 From: ASUS <515617283@qq.com> Date: Fri, 17 Oct 2025 10:31:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- start_webman_commands.php | 65 ++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/start_webman_commands.php b/start_webman_commands.php index 7bf7333..6d4bc19 100644 --- a/start_webman_commands.php +++ b/start_webman_commands.php @@ -1,22 +1,33 @@ ./logs/applysmstemp.log 2>&1 & setsid $!', + 'nohup php webman birthdaygiftsms > ./logs/birthdaygiftsms.log 2>&1 & setsid $!', + 'nohup php webman rabborderprint > ./logs/rabborderprint.log 2>&1 & setsid $!', + 'nohup php webman rabbproductupdate > ./logs/rabbproductupdate.log 2>&1 & setsid $!', + + // 若为 Windows 系统,替换为以下命令(start /b 后台运行,输出重定向) + // 'start /b nohup php webman applysmstemp > ./logs/applysmstemp.log 2>&1', + // 'start /b nohup php webman birthdaygiftsms > ./logs/birthdaygiftsms.log 2>&1', + // 'start /b nohup php webman rabborderprint > ./logs/rabborderprint.log 2>&1', + // 'start /b nohup php webman rabbproductupdate > ./logs/rabbproductupdate.log 2>&1', ]; -// 执行命令并输出结果 +// 2. 提前创建日志目录(避免日志写入失败) +$logDir = './logs'; +if (!is_dir($logDir)) { + mkdir($logDir, 0755, true); // 0755 是目录权限,true 支持创建多级目录 + echo "已创建日志目录:{$logDir}\n"; +} + +// 3. 批量执行命令(非阻塞) echo "开始启动 Webman 进程...\n"; echo "----------------------------------------\n"; @@ -24,18 +35,28 @@ foreach ($commands as $index => $cmd) { $commandNum = $index + 1; echo "执行命令 {$commandNum}: {$cmd}\n"; - // 执行命令(使用 shell_exec 执行并获取输出) - $output = shell_exec($cmd . ' 2>&1'); // 重定向错误输出到标准输出 - - // 检查命令是否成功执行(nohup 后台命令通常返回空,但可通过进程是否存在验证) - if ($output === null) { - echo "命令 {$commandNum} 启动成功(后台运行)\n"; + // 关键:用 proc_open 替代 shell_exec,强制关闭终端关联,避免阻塞 + $descriptors = [ + 0 => ['pipe', 'r'], // 标准输入(关闭,避免占用) + 1 => ['pipe', 'w'], // 标准输出(忽略) + 2 => ['pipe', 'w'] // 标准错误(忽略) + ]; + $process = proc_open($cmd, $descriptors, $pipes); + if (is_resource($process)) { + // 关闭所有管道,彻底脱离终端 + fclose($pipes[0]); + fclose($pipes[1]); + fclose($pipes[2]); + // 不等待进程结束(避免阻塞) + proc_close($process); + echo "命令 {$commandNum} 启动成功(后台运行,日志见 ./logs/)\n"; } else { - echo "命令 {$commandNum} 执行输出: {$output}\n"; + echo "命令 {$commandNum} 启动失败!\n"; } echo "----------------------------------------\n"; } -echo "所有命令已执行完毕。\n"; -echo "可通过 'ps aux | grep webman' 查看运行中的进程。\n"; -echo "可通过 'kill [进程ID]' 停止指定进程。\n"; \ No newline at end of file +echo "所有命令执行完毕!\n"; +echo "查看进程:ps aux | grep webman\n"; +echo "查看日志:cat ./logs/[进程名].log\n"; +echo "停止进程:kill [进程ID]\n"; \ No newline at end of file