Shell_exec() не возвращается немедленно при выполнении nohup в фоновом режимеPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Shell_exec() не возвращается немедленно при выполнении nohup в фоновом режиме

Сообщение Anonymous »

Я запускаю exec с помощью nohup в фоновом режиме, используя функцию PHPshell_exec. Похоже, он ожидает завершения выполненной команды вместо немедленного возврата.

Код: Выделить всё

private function processSystemData(array $files, string $jar_name, bool $no_server, string $out_filename): void
{
$i = 1;
chdir('/home/' . Constants::ASSET_USER);
foreach ($files as $file) {
$filename = $file->getTempName();
$cmd = 'nohup ' . Constants::JAVA
. ' -jar ' . Constants::JAVA_APPS . "$jar_name.jar"
. ' -f=' . $filename;
$password = false;
if (in_array($jar_name, ['netstat-query', 'server-query', 'software-versions'])) {
$password = (new BNCPasswordDecryptor('asset'))->decryptedPassword();
if ($no_server)
$cmd .= ' --no-server';
$cmd .= ' -u=' . Constants::ASSET_USER;
$cmd .= ' -p=' . "\"" . $password . "\"";
}
$output_dir = '/home/' . Constants::ASSET_USER . '/system-data/';
$outpath = $output_dir . pathinfo($out_filename, PATHINFO_FILENAME) . "-$i."
. pathinfo($out_filename, PATHINFO_EXTENSION);
$cmd .= ' --output=' . $outpath;
$cmd .= ' 2>&1 &';
$safe_cmd = $cmd;
if ($password)
$safe_cmd = str_replace($password, '****', $safe_cmd);
log_message('debug', __METHOD__ . " Process $jar_name-$i started: " . $safe_cmd);
shell_exec($cmd);
log_message('debug', __METHOD__ . " Process $jar_name-$i ended");
++$i;
} // foreach
}
Вот журнал:

Код: Выделить всё

INFO - 2024-05-13 10:10:01 --> CSRF token verified.
DEBUG - 2024-05-13 10:10:01 --> App\Controllers\AssetManager::processSystemData Process software-versions-1 started: nohup ~/jdk-21.0.2/bin/java -jar ~/software-versions.jar -f=/tmp/phpHZHUPF --no-server -u=info001sec -p="****" --output=/home/info001sec/system-data/software-versions-20240513_10_10_01-1.csv 2>&1 &
DEBUG - 2024-05-13 10:14:03 --> App\Controllers\AssetManager::processSystemData Process software-versions-1 ended
INFO - 2024-05-13 10:14:04 --> Session: Class initialized using 'CodeIgniter\Session\Handlers\FileHandler' driver.
Что заставляет его не возвращаться сразу после команды shell_exec()? (Выполнение кода Java ждало четыре минуты)
Я использовал альтернативную команду PHP exec(). Это не имело никакого значения.

Подробнее здесь: https://stackoverflow.com/questions/784 ... background
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Php exec внутри exec/вложенный exec
    Anonymous » » в форуме Php
    0 Ответы
    66 Просмотры
    Последнее сообщение Anonymous
  • Shell Exec работает неправильно, когда Exec во время Webhook
    Anonymous » » в форуме Php
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Никакой разницы в скорости при запуске exec(scp) в фоновом режиме не обнаружено.
    Гость » » в форуме Php
    0 Ответы
    53 Просмотры
    Последнее сообщение Гость
  • Запуск PHP «exec()» в фоновом режиме в Windows?
    Anonymous » » в форуме Php
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Exec /usr/java/openjdk-20/bin/java: ошибка формата exec при запуске образа Docker AWS ECS Fargate
    Anonymous » » в форуме JAVA
    0 Ответы
    117 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»