我正在尝试使用Perl中的NodeJS作为特定用户启动forever服务器。
这是我第一次使用Perl进行编程,因此可能很容易解决。我看了很多例子,但我看到的只是关于函数system
和exec
的相互矛盾的信息。
在我的Perl模块文件中,我尝试了system
和exec
。
使用system:
sub start_server {
my ( $result ) = @_;
my $return = system("forever --uid nodejs-34534 -a start /path/to/server.js");
$result->data($return);
return 1;
}
我应该如何在Perl中运行命令forever --uid nodejs-34534 -a start /path/to/server.js
?它没有返回任何内容或显示任何错误并运行其他命令,例如echo "$user"
工作正常,并返回运行Perl脚本的用户的当前用户名。
更新
在下面的许多评论之后,我正在使用错误的函数来获得所需的输出。我本来应该使用数组变量和反引号,感谢@zdim指出这一点。这解决了没有看到执行命令输出的问题。
使用反引号进行了更正:
sub start_server {
my ( $result ) = @_;
my @output = `forever --uid nodejs-34534 -a start /path/to/server.js`;
$result->data( \@output );
return 1;
}
然后又出现了另一个问题,该命令被调用但在收到输出后被停止,之后@Borodin表示我应该创建一个脚本和模块,只需要什么,并测试它是否可以自行运行。在创建了削减模块并运行它之后,执行的命令保持活动状态,所以现在我知道它不能保持活着的问题归结为我正在尝试扩展的Perl API。
我是否有任何想法可以解决为什么我正在扩展的Perl API正在停止这个过程?
答案 0 :(得分:1)
如果要将命令的输出存储在变量中,请使用反引号更改系统:
my $return = `forever --uid nodejs-34534 -a start server.js`;
请参阅此内容以了解system
和backticks
:
https://stackoverflow.com/a/800105/4248931