PHP shell_exec can';不执行特定命令
我在CentOS 7上运行一台服务器,由Plesk 17管理 我试图通过脚本中的PHP shell_exec can';不执行特定命令,php,shell,centos,scrapy,plesk,Php,Shell,Centos,Scrapy,Plesk,我在CentOS 7上运行一台服务器,由Plesk 17管理 我试图通过脚本中的shell\u exec运行命令,但每次都失败。起初我认为这是一个权限/目录问题,但事实似乎并非如此,因为命令在命令行中运行得非常好,用户与在shell\u exec中执行的用户相同 chdir("/var/www/vhosts/website.com/MyScraper"); $call = shell_exec("pwd & id -u -n & date & scrapy crawl c
shell\u exec
运行命令,但每次都失败。起初我认为这是一个权限/目录问题,但事实似乎并非如此,因为命令在命令行中运行得非常好,用户与在shell\u exec
中执行的用户相同
chdir("/var/www/vhosts/website.com/MyScraper");
$call = shell_exec("pwd & id -u -n & date & scrapy crawl crawler_name & date");
var_dump($call);
通过该调用,我看到了正确的路径,然后是当前用户(user1)、日期,然后是nothing。这意味着scrapy命令不起作用,最后一个日期调用也不执行(这就是我知道scrapy命令崩溃的原因)。在shell_exec obvisouly中仅运行scrapy cmd也不起作用
我怎样才能让它工作?在putty中,使用同一目录中的同一用户(user1)执行完全相同的调用
编辑:我从调用中获得此输出
Traceback (most recent call last):
File "/usr/bin/scrapy", line 11, in <module>
sys.exit(execute())
File "/usr/lib/python2.7/site-packages/scrapy/cmdline.py", line 128, in execute
cmds = _get_commands_dict(settings, inproject)
File "/usr/lib/python2.7/site-packages/scrapy/cmdline.py", line 46, in _get_commands_dict
cmds = _get_commands_from_module('scrapy.commands', inproject)
File "/usr/lib/python2.7/site-packages/scrapy/cmdline.py", line 29, in _get_commands_from_module
for cmd in _iter_command_classes(module):
File "/usr/lib/python2.7/site-packages/scrapy/cmdline.py", line 19, in _iter_command_classes
for module in walk_modules(module_name):
File "/usr/lib/python2.7/site-packages/scrapy/utils/misc.py", line 71, in walk_modules
submod = import_module(fullpath)
File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/usr/lib/python2.7/site-packages/scrapy/commands/version.py", line 6, in <module>
import OpenSSL
File "/usr/lib/python2.7/site-packages/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import crypto, SSL
File "/usr/lib/python2.7/site-packages/OpenSSL/crypto.py", line 16, in <module>
from OpenSSL._util import (
File "/usr/lib/python2.7/site-packages/OpenSSL/_util.py", line 6, in <module>
from cryptography.hazmat.bindings.openssl.binding import Binding
File "/usr/lib64/python2.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py", line 13, in <module>
from cryptography.hazmat.bindings._openssl import ffi, lib
ImportError: /usr/lib64/python2.7/site-packages/cryptography/hazmat/bindings/_openssl.so: cannot enable executable stack as shared object requires: Permission denied
回溯(最近一次呼叫最后一次):
文件“/usr/bin/scrapy”,第11行,在
sys.exit(execute())
文件“/usr/lib/python2.7/site packages/scrapy/cmdline.py”,执行中的第128行
cmds=\u获取\u命令\u命令(设置,项目中)
文件“/usr/lib/python2.7/site packages/scrapy/cmdline.py”,第46行,在命令中
cmds=\u从\u模块获取\u命令\u('scrapy.commands',inproject)
文件“/usr/lib/python2.7/site packages/scrapy/cmdline.py”,第29行,在\u-get\u-commands\u-from\u模块中
对于命令类(模块)中的cmd:
文件“/usr/lib/python2.7/site packages/scrapy/cmdline.py”,第19行,在命令类中
对于walk_模块中的模块(模块名称):
文件“/usr/lib/python2.7/site packages/scrapy/utils/misc.py”,第71行,在walk_模块中
子模块=导入模块(完整路径)
文件“/usr/lib64/python2.7/importlib/_init__.py”,第37行,在导入模块中
__导入(名称)
文件“/usr/lib/python2.7/site packages/scrapy/commands/version.py”,第6行,在
导入OpenSSL
文件“/usr/lib/python2.7/site packages/OpenSSL/_init__.py”,第8行,在
从OpenSSL导入加密,SSL
文件“/usr/lib/python2.7/site packages/OpenSSL/crypto.py”,第16行,在
从OpenSSL.\u util导入(
文件“/usr/lib/python2.7/site packages/OpenSSL/_util.py”,第6行,在
从cryptography.hazmat.bindings.openssl.binding导入绑定
文件“/usr/lib64/python2.7/site packages/cryptography/hazmat/bindings/openssl/binding.py”,第13行,在
来自cryptography.hazmat.bindings.\u openssl导入ffi,lib
ImportError:/usr/lib64/python2.7/site-packages/cryptography/hazmat/bindings//\u openssl.so:无法启用共享对象所需的可执行堆栈:权限被拒绝
可能是PATH
问题。请尝试使用scrapy
实用程序的绝对路径,或为http服务器进程设置正确的PATH
环境变量。请记住,此进程不是您正在测试手动执行的登录进程的结果。这可能很容易导致错误不同的路径
环境变量。我认为它应该是&
,而不是&
。难道没有一个&
在后台运行该命令吗?@aynber即使只有我的scrapy调用,它也不起作用。@arkascha尝试了“usr/bin/scrapy crawl mycrawler”,它是从putty开始工作的,而不是从shell\u exec开始的。你尝试过shell\u exec吗(“刮痧爬行器\u name 2>&1”);
检查是否有输出到stderr?可能是路径
问题。请尝试使用scrapy
实用程序的绝对路径,或为http服务器进程设置正确的PATH
环境变量。请记住,此进程不是您测试手册时登录进程的结果使用执行。这可能很容易导致不同的路径
环境变量。我认为它应该是&
,而不是&
。单个&
不是在后台运行命令吗?@aynber即使只使用我的scrapy调用,它也不起作用。@arkascha尝试了“/usr/bin/scrapy crawl mycrawler”,从putty开始工作,而不是从putty开始m shell_exec.您是否尝试过shell_exec(“scrapy crawl crawler_name 2>&1”)
检查是否有输出到stderr?