2013-03-12 2 views
0

Я пытаюсь запустить файл сценария sh из функции php shell_exec(), но каждый раз, когда возврат является некорректным.PHP shell_exec() не возвращает правильное состояние

Это содержание ш файла:

if [[ -z $1 ]] 
then 
     echo "svn st: NULL" 
else 
     command=$(ssh -q [email protected]_OF_THE_REMOTE_NODE "svn st $1") 
     if [[ -z $command ]] 
     then 
       test="svn st: OK" 
     else 
       test="svn st: KO" 
     fi 
     echo $test 
fi 

каждый раз, когда я запускаю этот скрипт ш от оболочки эхо всегда правильно. «$ 1» содержит рабочий каталог, который я должен проверить.

Но если я запускаю тот же сценарий таким образом:

$w_path = $working_path['path']; 
$com = "sh /tmp/my_script_test.sh $w_path"; 

echo "content com ".$com; 

$res = shell_exec($com); 

echo "content res ".$res; 

последнее эхо-печать ВСЕГДА «СВН-й: OK», что является правильным для некоторого $w_path, но полностью uncorrect для других! Зачем? Как я могу найти ошибку?

Я не думаю, что это проблема с ключом ssh, потому что я использовал руководство для решения этой проблемы, и теперь мне не нужно вставлять пароль для удаленного сервера.

Благодаря уважением

+0

Выполняется ли сценарий php тем же пользователем, который выполняет скрипт? Введите 'whoami' в верхней части файла sh, ваш php-скрипт, вероятно, запускается как www-data или apache (у кого нет доступа к удаленному серверу с помощью keypair). –

+0

Привет, Джон за вашу помощь. Да, во-вторых, пользователь «Apache», а не «root», но я поместил ключ ssh в var/www/.shh локального сервера в remote /root/.shh/authorized_keys. Должен ли я делать другие вещи? – michoprogrammer

+0

Измените команду на 'sh -x /tmp/my_script_test.sh $ w_path', так что вы увидите все расширения переменных. – Barmar

ответ

2

Изменить

 command=$(ssh -q [email protected]_OF_THE_REMOTE_NODE "svn st $1") 
     if [[ -z $command ]] 

в

 if ssh -q [email protected]_OF_THE_REMOTE_NODE "svn st $1" 

и помните: Всякий раз, когда что-то не работает, то это потому, что это слишком сложно (не могу вспомнить, где Я читал это).