|
|
@@ -109,19 +109,22 @@ class ProcessBatchEpisodeGenerationCommand extends Command
|
|
|
];
|
|
|
|
|
|
if (DIRECTORY_SEPARATOR === '/') {
|
|
|
- // Linux:用 nohup 后台启动并立即返回,避免父进程退出时
|
|
|
- // Symfony Process 析构(stop(0))把子进程一起杀掉
|
|
|
- $commandLine = 'nohup ' . implode(' ', array_map('escapeshellarg', $command)) . ' > /dev/null 2>&1 &';
|
|
|
- $process = Process::fromShellCommandline($commandLine);
|
|
|
+ // Linux:用 nohup 后台启动并立即返回。
|
|
|
+ // 使用 exec 而不是 Symfony Process,避免父进程退出时 Process 析构(stop(0))影响子进程;
|
|
|
+ // 子进程输出写入日志文件,便于排查拉起失败的原因。
|
|
|
+ $logFile = storage_path('logs/batch-worker-' . date('Ymd') . '.log');
|
|
|
+ $commandLine = 'nohup ' . implode(' ', array_map('escapeshellarg', $command))
|
|
|
+ . ' >> ' . escapeshellarg($logFile) . ' 2>&1 &';
|
|
|
+ exec($commandLine);
|
|
|
+ dLog('command')->info("拉起子进程命令: " . $commandLine);
|
|
|
} else {
|
|
|
// Windows:数组参数直接启动(开发环境)
|
|
|
$process = new Process($command);
|
|
|
$process->disableOutput();
|
|
|
+ $process->setTimeout(null);
|
|
|
+ $process->setIdleTimeout(null);
|
|
|
+ $process->start();
|
|
|
}
|
|
|
-
|
|
|
- $process->setTimeout(null);
|
|
|
- $process->setIdleTimeout(null);
|
|
|
- $process->start();
|
|
|
}
|
|
|
|
|
|
/**
|