从php运行shell脚本

时间:2010-08-24 08:28:38

标签: php shell ssh

我正在尝试创建一个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进程之后(页面继续无限加载,如果我不杀死2个bash进程,处理器活动为100%):

/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命令仍然没有喜悦,如果我通过putty运行脚本工作得很好。

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 个答案:

答案 0 :(得分:3)

运行此

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

是否正确列出了您的路径?如果是这样,那么你的问题不是PHP,如果它没有列出或仍然给出错误,那么PHP就是你的问题,我们可以从那里继续。

从您列出的错误中,我的第一个猜测是PATH未设置,因此lib.sh无法找到它正在寻找的内容。

请记住,您使用自定义shell(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');

答案 1 :(得分:0)

我想我明白了:

遵循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文件夹...万岁。