【问题标题】:Error 127 with cake commandcake 命令出现错误 127
【发布时间】:2016-01-20 11:20:37
【问题描述】:

我用 CakePHP 2.x 创建了一个 Shell 任务,我想通过一个控制器来执行它。因此,我创建了一个在 cli 上执行命令以运行 Shell 任务的函数。这是我的文件:

// I want to launch it in background task
$pid = exec(APP . 'Console/cake {myCommand} {myTask} {argument} >/dev/null 2>&1 & echo $!', $output, $return_var);

debug($pid);
debug($output);
debug($return_var);

它呈现:

// line xx
''
// line xx
array()
// line xx
(int) 127

我尝试像这样只启动 cake 命令:

$pid = exec(APP . 'Console/cake', $output, $return_var);

我得到了同样的结果。似乎 shell 没有找到完整的路径,但这很奇怪,因为它是正确的路径。我在我的机器上测试了它,它运行良好。

你知道它是从哪里来的吗?

谢谢

【问题讨论】:

  • 为什么要从控制器调用 Cake shell 任务?这听起来完全错误。如果浏览器和命令行都使用了共享代码,那么这个功能最好放在一个可以被任务和控制器调用的模型中。
  • 因为我们想从浏览器中的 URL 启动这个 shell 脚本。这是一个长期运行的后台任务,我们不想在此过程中“阻止”用户。
  • 这不能通过 cronjob 来自动化吗? exec() 真的应该避免。如果您需要能够从浏览器触发它,也许您应该考虑使用类似队列插件 (github.com/dereuromark/cakephp-queue) 来触发任务。
  • 感谢您的回复。这似乎是个好主意。我会研究一下这个插件。

标签: php shell cakephp server sysadmin


【解决方案1】:

172是你想出来的真正含义,见http://tldp.org/LDP/abs/html/exitcodes.html

但这很奇怪,因为这是正确的道路

老实说,我怀疑系统在撒谎。因此,请检查目标机器上的路径,而不仅仅是在您的开发环境中。

还要检查是否允许执行脚本的用户这样做。 Linux 权限可能很有趣。您可以尝试为cake 文件设置777,并确保它也是可执行的。

【讨论】:

  • 对不起,我的回答有点晚了,但我正在测试你的建议。最后,我没有使用 Controller 执行我的任务,而是在我的服务器上设置了一个 cron 作业。我使用 CakePHP-Queue 插件从我的控制器中添加新任务。但是,对于错误 127,我通过将 exec 替换为 proc_open 发现了执行错误。文件Console/cake 执行dirnamebasename 等命令,但不是完整路径(例如:/usr/bin/dirname),我认为这是问题所在。
猜你喜欢
  • 2015-09-06
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多