【问题标题】:trigger node js file触发节点js文件
【发布时间】:2012-01-27 02:00:51
【问题描述】:

我有一个通过 node.js 运行的 JS 文件,所以通常我会打开一个终端窗口并输入类似node myfile.js 的内容,它会运行一整天;很有趣。

然后当我想重新启动它时,我按了 control-c 然后它就退出了。然后我可以再次运行命令。

现在我想做的是能够通过网页来执行此操作,以便我的用户可以运行特定的 JS 文件并能够“重新启动”它们。

所以有两个问题:

  1. 有可能吗?如果有,我该如何开始?
  2. 它是否安全,如果不安全,是否可以使其安全?

基于斯瓦特金斯的回应

我试过了,一无所获

 $output = exec("node -v");
 echo $output;

然后我在我的本地机器上试了试,结果很好?

我仍然不确定安全性和停止正在运行的脚本的能力

【问题讨论】:

  • 不,$output 应该作为 exec 函数的第二个参数传递:exec("node -v", $output); print_r($output);

标签: php node.js command


【解决方案1】:

假设您使用的是基于 Unix 的操作系统:

您可以通过 exec() 函数运行 shell 命令:

// in php file
// to start the script 
exec("node myscript.js &", $output);

$output变成每行输出的数组,所以可以看到进程id是什么。然后您将使用该进程 ID 来终止脚本:

exec("kill " . $processid);

【讨论】:

  • 然后我将如何停止该脚本?这可以安全运行吗?还有我怎么知道它是否正在运行?
  • 更新了我的答案-您需要获取进程ID,因此通过在后台运行myscript.js(通过将&附加到命令),您将收到一个进程ID输出数组。您可能需要进行一些字符串操作来获取实际的 id,但随后您只需使用它来终止进程。
  • 这肯定会运行脚本,但在我终止进程之前不会给我任何 uoutput,然后它会给我写入 console.log() 的数据
  • 不适合我。 PHP 找不到节点。有没有办法在php中找到节点的路径?
  • @swatkins 好的,兄弟,我找到了一种适用于 windows 的解决方法,以防有人需要它stackoverflow.com/a/43851784/3201616
【解决方案2】:

我会避免与外壳直接交互。以这种方式解决它可能是最安全的:

  • 实现一些整体“服务”脚本,启动用户节点应用程序并使其保持运行(类似于https://github.com/isaacs/node-supervisor
  • 制作它,因此它会在相关文件或数据库条目发生更改时自动重新启动
  • 当用户触发重新启动时,将标志(时间戳?)添加到重新启动脚本监视的数据库条目或文件中。然后它将重新启动 node.js-app/script。

【讨论】:

  • 为什么没有shell交互?接受的答案有什么问题?
猜你喜欢
  • 1970-01-01
  • 2018-07-22
  • 2014-06-06
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多