我有一个简单的 shell脚本:

>在远程计算机上创建目录.
>将.epub文件复制到远程计算机的新目录.
>运行kindlegen将.epub转换为.mobi.
>远程服务器将新的.mobi文件复制回原始服务器.

两台服务器都通过公钥配置SSH无密码登录.

在命令行运行脚本运行良好.从PHP shell_exec命令从服务器运行它将执行脚本,但ssh和scp命令似乎没有执行,或者至少不输出任何内容,即使我使用-v标志.

这是调用shell脚本的PHP函数:

function mobi_watermark($userid,$email,$epubpath)
{

    $outpath = "/tmp/epub$userid/"; # the book gets marked for each user,store each epub under a unique work folder to avoid collision
    shell_exec("chmod -R 777 ".$outpath); # web server creates files under user "nobody".
    shell_exec("del.sh"); # deletes old files if they exist
    shell_exec("rep.sh $userid $email $epubpath"); # creates the initial .epub and tmp dir
    shell_exec("chmod -R 777 ".$outpath); 
    shell_exec("kindle.sh $outpath"); # this is the mobi conversion,where the problem is
    $this->mobi_ufa_download('ufa-187.mobi',$outpath);
}

这是带有失败命令的shell脚本:
[kindle.sh]

#!/usr/local/bin/bash
# uses the same /tmp$userid path as the other scripts,but on the Remote Server
TMPPATH=$1 
cd $TMPPATH
# create remote dir
ssh -v user@server 'mkdir -v '$TMPPATH
# copy the source epub file to remote
scp -v $TMPPATHfile-name.epub user@server:$TMPPATH
# perform the conversion and copy the .mobi result back to originating server
/usr/bin/ssh -v user@server 'cd '$TMPPATH'; /home/username/kindlegen/kindlegen ./file-name.epub; scp -v file-name.mobi user@originating-server:'$TMPPATH';rm -rf '$TMPPATH

如果我从脚本文件中运行这一系列命令,或者自己从命令行运行单独的命令,那么这一切都可以完美地运行.

当通过PHP脚本运行时,如果我决定回显测试命令,我可以看到脚本输出,如果我中断源文件名,scp将报告错误,但是如果scp或ssh命令正确则没有任何反应. -v标志甚至没有任何详细的调试输出.

我一定错过了一些明显的东西?我猜这是因为PHP正在使用SSH不喜欢的用户’nobody’.如果这是问题,有没有办法解决这个问题?

您可能想尝试添加
</dev/null

在违规命令的最后,只是在某种程度上命令需要输入的情况下.

php – SSH似乎不能在通过Web服务器调用的bash脚本中运行的更多相关文章

  1. osx – 无法创建目录/ var / teamsserver

    OpenSSH_6.2p2,OSSLShim0.9.8r8Dec2011debug1:Readingconfigurationdata/etc/ssh_configdebug1:/etc/ssh_configline20:Applyingoptionsfor*debug1:Connectingto1.2.3.4[1.2.3.4]portPORT.debug1:Connectionestablished.Couldnotcreatedirectory‘/var/teamsserver/.ssh’.debug

  2. ios – Xcode Server 4.0 git从构建触发脚本推送

    我为一个托管在github上的项目安装了一个XcodeBot.我按照步骤和设置机器人来使用我现有的SSH密钥.验证成功,项目结算和建立.然后,我在预触发器操作中添加了一个shell脚本,它增加了plist中的版本,将其标记,并将该更改提交到github.但是当我尝试从shell脚本执行gitpush时,我得到:–推送到git@github.com:spex-app/spex-ios.git权限被拒

  3. ios – Xcode上传错误:无法打开ssh会话. (16)

    注意:我们终于上传了该应用程序,但是我们并没有真正解决这个问题,所以如果有人可以分享一些有关这个问题的宝贵意见或经验,我将不胜感激.我也检查了以下2个类似的问题,但这些没有帮助:>Erroruploadingiosapplicationtoitunesconnect“failedtoopensshsession(16)”>AppStoresubmission/distributionerror“f

  4. ios – -bash:git:命令在lion osx的Xcode 4中找不到

    通过Xcode4.3–>file–>源控制–>存储库–>克隆存储库,我从codesion.com克隆了一个存储库.但是当我去gitinit或gitadd时,找不到错误-bash:git:command.现在,Xcode4.3附带了git,所以我该怎么做才能让它工作?

  5. swift详解之二十--------在xcode中使用git管理源代码,将代码提交到github

    在xcode中使用git管理源代码,将代码提交到github本文记录一下如何在Xcode中使用Git作为源代码控制工具,以及如何将本地的Git仓库和远程Github上的仓库集成起来,虽然这章节和swift没有关系,但我还是放在这里。对详细的git操作可以看在Xcode中使用Git进行源码控制讲得很详细,很好。将xcode与github链接起来。

  6. 使用OSC生成SSH

    在很多项目开始前,大家可能都愿意把项目或者自己封装的代码放到github上,但是有一点蛋疼的就是如果要在github上新建私有的项目是要收费的,所以我选择了OSC,这个不仅可以吧github的项目转接到OSC上,而且OSC还可新建私有的项目。好了,牛逼不吹了,开始下面部署SSH的步骤。第一步访问git.oschina.net,注册自己的账号第二步访问如下界面第三步打开终端第四步查看公钥第五步第六步如果你看到了这个WelcometoGit@OSC,yourname!标识,就说明成功了。

  7. 如何在我的Android中运行BASH脚本?

    我的BASH脚本在Fedora/CentOS中工作.但是我正在测试一个Androideeepad变压器.我有终端访问,我写了一个小测试脚本.但它不工作,我该如何解决?我究竟做错了什么?我看到,虽然它被指定#!/bin/bash错误由sh发布–可能会做错了.UPD

  8. Android – Bash无法找到adb,即使它绝对在那里

    我已经尝试将platform-tools文件夹添加到我的路径以及sudo和suing,但是无论它是什么样的文件都找不到.有人知道可能发生什么事吗?解决方法您正在运行64位系统,而您没有安装32位兼容性库.这个错误实际上来自于它找不到32位ld.so的事实.如果你使用ubuntu/debian,我想你只需要sudoapt-getinstallia32-libs,它应该可以工作.

  9. SSH网上商城之使用ajax完成用户名是否存在异步校验

    这篇文章主要介绍了SSH网上商城之使用ajax完成用户名是否存在异步校验的相关资料,需要的朋友可以参考下

  10. PyCharm如何配置SSH和SFTP连接远程服务器

    这篇文章主要介绍了PyCharm如何配置SSH和SFTP连接远程服务器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部