запустить скрипт оболочки из php - PullRequest
1 голос
/ 24 августа 2010

Я пытаюсь создать скрипт php, который может подключиться через ssh к моему серверу Qnap TS219 и запустить на нем команду.

Мой скрипт до сих пор нормально подключается к серверу, но когда я запускаю команду, я получаю сообщение об ошибке и не могу понять его.

exec.sh

#!/bin/bash
cp /share/MD0_DATA/Qdownload/rapidshare/admin/script.txt /share/MD0_DATA/Qdownload/rapidshare/admin/script.sh
chmod 755 /share/MD0_DATA/Qdownload/rapidshare/admin/script.sh
nohup sh /share/MD0_DATA/Qdownload/rapidshare/admin/script.sh &
exit 0

script.sh

#!/bin/bash
/opt/bin/plowdown -o /share/MD0_DATA/Qdownload/rapidshare /share/MD0_DATA/Qdownload/rapidshare/admin/down.txt 2>/share/MD0_DATA/Qdownload/rapidshare/admin/output.txt

команда, которую я сейчас выполняю через ssh после отправки формы:

echo $ssh->exec('sh /share/MD0_DATA/Qdownload/rapidshare/admin/exec.sh');

Сейчас генерируется приведенный ниже код, но только после того, как я уничтожаю 2 процесса bash (страница продолжает загружаться неопределенно, а активность процессора достигает 100%, если я не уничтожаю 2 процесса bash):

/share/MD0_DATA/.qpkg/Optware/share/plowshare/lib.sh: line 261: getopt: command not found start download (rapidshare): http://rapidshare.com/files/312885386/Free_Stuff-Your_Internet_eBay_Business_Free_Startup_Resources.rar /share/MD0_DATA/.qpkg/Optware/share/plowshare/lib.sh: line 261: getopt: command not found /share/MD0_DATA/.qpkg/Optware/share/plowshare/lib.sh: line 46: --insecure: command not found Error: failed inside rapidshare_download() 

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

Edit1. Я также попробовал команду shell_exec до сих пор не радует, и если я запускаю сценарий, то замазка прекрасно работает.

Edit2. Я думаю, что мы к чему-то.

Я добавил предложенный вами код и получил следующее сообщение.

sh: /share/MD0_DATA/.qpkg/Optware/share/plowshare: is a directory /usr/bin:/bin:/usr/sbin:/sbin 

Я думаю, что в настоящий момент PATH - это usr / bin: / bin: usr / sbin: / sbin, и я думаю, что это должен быть / opt / bin / opt / sbin, потому что есть «исполняемые файлы». Есть идеи?

Спасибо, Крис.

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

Запустите это

echo $ssh->exec('pwd');

Правильно ли указан ваш путь?Если это так, то ваша проблема НЕ в PHP, если он не выводит список или по-прежнему выдает ошибку, тогда PHP - это ваша проблема, и мы можем продолжить с этого.

Исходя из указанной вами ошибки, мое первое предположениеБудь то, что PATH не установлен, поэтому lib.sh не может найти то, что ищет.

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

Редактировать: Так как он дает / root, мы, по крайней мере, знаем, что он проходит, почему бы не установить PATH и т. д.*

echo $ssh->exec('PATH=$PATH;/share/MD0_DATA/.qpkg/Optware/share/plowshare; sh /share/MD0_DATA/Qdownload/rapidshare/admin/exec.sh');

Помните, что вы также можете использовать это, чтобы увидеть, что установлено, а что нет.

echo $ssh->exec('ECHO $PATH');
0 голосов
/ 24 августа 2010

Я думаю, что получил:

Следуя логике viper_sb, я изменил код на:

echo $ssh->exec('PATH=$PATH:/share/MD0_DATA/.qpkg/Optware/bin; sh /share/MD0_DATA/Qdownload/rapidshare/admin/exec.sh');
echo $ssh->exec('echo $PATH');

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

...