Выполнить фоновый php-скрипт с помощью команды shell_exec, которая работает с SSH

Проблема, с которой я борюсь в течение нескольких часов, заключается в следующем: я хочу выполнить скрипт в фоновом режиме с помощью PHP, поэтому я использую функцию shell_exec(), и я не могу заставить ее работать. Но это не проблема, связанная с функцией shell_exec, потому что я протестировал команду shell_exec('sleep 5'), и она сработала. Команда, которую я пытаюсь выполнить:

shell_exec('nohup /kunden/usr/local/bin/php5.4 /kunden/homepages/XX/dXXXXXXXX/htdocs/myproject/background_script.php > /dev/null 2>&1 & echo $!');

Сценарий вставляет одну строку в базу данных MySQL. Я протестировал точно такую ​​же команду внутри кавычек через SSH с замазкой, и она отлично сработала, но я не могу заставить ее работать из веб-браузера.

Я не думаю, что это важно, но это общий сервер с 1 и 1.


person Jesús Cerezuela Zaplana    schedule 10.08.2014    source источник
comment
Вы говорите, что я не могу заставить его работать внутри моего php-кода. Что происходит или не происходит? Вы получаете сообщения об ошибках? Возможно, вы могли бы удалить перенаправление в команде, чтобы не отбрасывать сообщения об ошибках, которые выдает программа.   -  person Kenster    schedule 10.08.2014
comment
Я знаю, что это не работает, потому что не вставляет строку в базу данных. Если я делаю echo shell_exec('...') из php в браузере, возвращается номер pid. В последнем исполнении 13885. Я что-то упустил?   -  person Jesús Cerezuela Zaplana    schedule 10.08.2014


Ответы (1)


Согласно оригинальному плакату:

Наконец, я использовал библиотеку phpseclib, и теперь она у меня работает.

$ssh = new Net_SSH2('myhosting');
if (!$ssh->login('user', 'pass')) {
    exit('Login Failed');
}

$this->pid = $ssh->exec(sprintf(
    '%s > %s 2>&1 & echo $!',
    $this->command,
    $outputFile
));
person Community    schedule 29.11.2017