2016-12-19 2 views
-3

특정 사용자로 Perl에서 forever을 사용하여 NodeJS 서버를 시작하려고합니다.Perl에서이 명령을 실행하는 올바른 방법은 오류가 없습니다.

Perl에서 프로그래밍 한 것은 이번이 처음이므로 해결하는 것이 매우 간단합니다. 많은 예제를 살펴 봤지만 함수가 systemexec과 관련하여 충돌하는 정보 만 있습니다.

내 Perl 모듈 파일에서 systemexec을 모두 시도했습니다.

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을 실행해야합니다 system 사용

? 아무것도 반환하지 않거나 오류를 표시하고 다른 명령을 실행하면 예를 들어 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

댓글이 확장 된 논의하지 않습니다; 이 대화는 [채팅으로 이동되었습니다] (http://chat.stackoverflow.com/rooms/130997/discussion-on-question-by-jjb-what-is-the-correct-way-to-run-this- command-in-p). – Flexo

답변

1

변경이 변수에 명령의 출력을 저장하려는 역 따옴표로 시스템 :

my $return = `forever --uid nodejs-34534 -a start server.js`; 

systembackticks 이해를 참조하십시오 : https://stackoverflow.com/a/800105/4248931