2015-09-24 2 views
1

У меня есть скрипт PHP, который выполняет сценарий bash на удаленном сервере, который запускает несколько процессов.Сбой процесса ssh2_exec до завершения PHP Bash

<?php 
$connection = ssh2_connect('address1.com', 22); 
ssh2_auth_password($connection, 'user', 'pass'); 

$stream = ssh2_exec($connection, '/root/incoming/process.sh'); 
?> 

Бах скрипт process.sh отлично работает при локальном запуске на удаленном сервере, без проблем.

#!/bin/bash 

wget -O /root/incoming/myfile.mp3 http://address2.com/myfile.mp3; 

lame --decode /root/incoming/myfile.mp3 - | /usr/settings/stereo_tool_cmd_64 - - -s /usr/settings/setting.sts | lame -b 128 - /var/www/processed/myfile.mp3 

Но когда я пытаюсь выполнить его удаленно с помощью PHP скрипта бомбы на различных этапах первого процесса (Wget). Он даже не завершает загрузку wget, останавливаясь на случайных этапах передачи.

Это проблема с PHP ssh2_exec?

Или я что-то упускаю?

ответ

0

Добавить set_time_limit (0); в начало сценария. Обычно PHP по умолчанию использует тайм-аут через 30 секунд.

+0

Нет, это ничего не изменило. Все еще бомбит. Я должен добавить, что он бомбит около 2 секунд. – Grant

+0

Это похоже на то, что второй набор (ламе) пытается начать, пока wget закончил. Я пробовал добавить sleep 10 и ждать до хромого процесса, но ничего не имеет значения. – Grant

+0

@Grant. Может быть, '' 'в конце строки' wget' каким-то образом запускает фоновое выполнение этой команды в вашей оболочке? Этот сценарий ведет себя одинаково, когда вы запускаете его в интерактивном режиме самостоятельно? –

2

Нашел после долгих охоты ..

Мой PHP скрипт не требует какой-либо обратной связи от сценария оболочки, мне просто нужно, чтобы запустить его и забыть о нем.

Что решить мою проблема был следующим:

$stream = ssh2_exec($connection, "/root/incoming/process.sh &> /dev/null &"); 

Надеется, что это помогает кто-то другое.

Смежные вопросы