触发节点js文件

问题描述:

我有一个通过node.js运行的JS文件,所以通常我打开一个终端窗口并输入类似node myfile.js之类的东西,它运行并整天运行;乐趣。触发节点js文件

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

现在我想要做的是能够通过网页做到这一点,以便我的用户可以运行特定的JS文件,并且能够“重启”它们。

这个所以两个问题:

  1. 是否有可能,如果是这样我怎么开始?
  2. 它是否安全?如果不是,它可以安全吗?

基于swatkins响应

我想这并没有什么

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

然后我想我的本地计算机上,它好工作怎么办?

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

+0

不,应该将'$ output'作为exec函数的第二个参数传递:'exec(“node -v”,$ output); print_r($ output);' – swatkins 2011-12-23 22:07:49

的能力,假设你在基于Unix的操作系统:

您可以通过EXEC运行shell命令()功能:

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

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

exec("kill " . $processid); 
+0

,然后我将如何停止该脚本?这是安全的运行?我怎么知道它的运行? – mcgrailm 2011-12-23 21:38:37

+0

更新了我的答案 - 您需要获取进程ID,所以通过在后台运行'myscript.js'(通过追加'&'到命令),您将在输出数组中获得进程id。你可能需要做一些字符串操作来获得实际的id,但是你只是用它来杀死这个进程。 – swatkins 2011-12-23 21:54:31

+0

这个特定的运行脚本,但不给我任何uoutput,直到我杀了进程,然后它给了我写入到console.log() – mcgrailm 2011-12-23 23:42:58

我会避免与shell的任何直接交互。或许,这将是最安全的,解决这个问题是这样的:

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

为什么你不会有shell交互?接受的答案有什么问题? – 2012-10-27 20:50:33