2010-08-24 236 views
1

我正在尝试创建一个可以通过ssh连接到我的Qnap TS219服务器并在其上运行命令的php脚本。从PHP运行shell脚本

到目前为止,我的脚本可以很好地连接到服务器,但是当我运行该命令时,我收到一条错误消息,我无法弄清楚。

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进程后(页面不断加载,处理器活动在10 0%如果我不杀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中:usr/sbin目录:/ sbin目录,我想这应该是的/ opt/bin中的/ opt/sbin目录,因为那里是 “可执行文件”。任何ideeas?

谢谢, 克里斯。

+0

你试过passthru()或system()吗? – 2010-08-24 09:18:31

+0

刚刚尝试过他们,没有运气...甚至没有生成错误代码...我用system和passtrhu替换了exec命令(希望这是我想要的方式)...谢谢你答复,保罗。 C. – Chris19 2010-08-24 10:10:45

+0

如果可能的话,你应该使用Bash内建'getopts'而不是外部'getopt'。请参阅“getopts”一节[此处](http://mywiki.wooledge.org/BashFAQ/035)。 – 2010-08-24 15:05:07

回答

3

运行此

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

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

从你列出的错误中,我的第一个猜测是PATH没有设置,所以lib.sh无法找到它所需要的。

记住你正在使用自定义shell(PHP ssh)登录,通常情况下没有设置它们应该是的,所以你的脚本可能找不到像路径和变量这样的需求。

编辑: 因为它给/根,我们至少知道它会通过,何不也设置PATH等等

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

记住,你也可以用它来看看什么是和ISN没有被设置。

echo $ssh->exec('ECHO $PATH'); 
+0

/root 这就是我得到的结果我运行上述命令。 我正在考虑关于所需文件的路径的同样的事情,但不知道如何解决它...... :(...希望有人会帮助我出去。 – Chris19 2010-08-24 14:16:49

+0

更新了我的答案 – 2010-08-24 14:50:50

+0

我更新了我的问题。 – Chris19 2010-08-24 15:35:10

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文件夹中... hooray。