在cron作业中运行exec()函数无法找到命令

时间:2015-12-20 02:49:08

标签: php cron

我使用cron定期运行php脚本:

*/5 * * * * php /path/to/my/script.php

在php脚本中,我有一个运行node:

的exec命令
$command_str = 'node my_node_script.js';
exec($command_str, $output_arr, $error_res);

一切都在命令行上运行良好,但不是通过cron。所以我记录了输出,我收到以下错误:

sh: node: command not found

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:0)

为避免与其他软件包冲突,Debian开发团队决定使用/usr/bin/nodejs作为node.js的路径。如果您使用的是Ubuntu或Debian,则应安装 node-legacy 包以使用node命令调用nodejs:

sudo apt-get install nodejs-legacy

对于现代nodejs版本,您应该改为调用nodejs命令或者安装nodejs的完整路径:

/usr/bin/nodejs my_script.js
or
/home/user/.nvm/vx.xx.xx/bin/node my_script.js

答案 1 :(得分:0)

我想通过John C的评论来解决这个问题。

我所做的是从命令行使用which node来找出安装节点的位置(在我的例子中是usr/local/bin/node),然后更新exec()调用以使用此绝对路径:

$command_str = '/usr/local/bin/node my_node_script.js';
exec($command_str, $output_arr, $error_res);

我希望如果你遇到这个挑战会有所帮助。