2016-12-19 6 views
-1

일정한 시간 동안 특정 도메인에 대한 요청을 방지하고 같은 시간 동안 특정 프로세스를 종료하려는 스크립트를 만들고 싶습니다.백그라운드에서 Perl 스크립트를 실행하고 명령을 보내십시오.

나는 명령을 보낼 수있는 데몬과 같은 것을 갖고 싶습니다. 예를 들어, 내가 붙어있어 무엇 some_script start, 또는 새 도메인/공정을 추가하는 식으로 뭔가에 의해 생성 될 데몬 등

을 시작, some_script timeleft으로, 남은 시간 을 볼 수 에 :

  • 데몬을 만드는 방법은 무엇입니까? 나는 내가 내 설명을 충분히 명확했다 희망 명령 줄

에서 데몬에 명령을 보내는 방법을 모르는

  • this을 보았다.

  • +1

    HTTP 기반으로 만들어서 완전히 새로운 서버를 만들 필요가없는 이유는 무엇입니까? – ikegami

    +1

    @cocosushiTS : 처음부터 자신 만의 서버를 만들거나 기존 모듈을 사용하여 HTTP 서버를 만들 수 있습니다. – Borodin

    +1

    @cocosushiTS : 선택한 모든 프로세스 간 통신을 사용하여 자체 서버를 만들 수 있습니다. 소켓은 한 가지 방법이지만 매우 낮은 수준에서 작동하므로 간단한 프로토콜을 설계해야합니다.HTTP 서버를 구현할 수있는 기성품 소프트웨어가 많기 때문에 대부분은 일반 텍스트 인 HTTP 요청에 응답하는 내용을 작성하는 것이 좋습니다. – Borodin

    답변

    1

    아마 당신이 참조 대답의 뼈를 사용하는 것이지만, 추가

    • SIGHUP에 대한 핸들러 억제하기 위해 IP가 설정 파일을 다시는-읽고,

    • 남아있는 시간을 알려주는 SIGUSR1의 핸들러.

    그래서,이 약과 같습니다

    pkill -HUP daemon.pl 
    

    또는

    pkill -USR1 daemon.pl 
    

    :

    #!/usr/bin/perl 
    
    use strict; 
    use warnings; 
    use Proc::Daemon; 
    
    Proc::Daemon::Init; 
    
    my $continue = 1; 
    ################################################################################ 
    # Exit on SIGTERM 
    ################################################################################ 
    $SIG{TERM} = sub { $continue = 0 }; 
    
    ################################################################################ 
    # Re-read config file on SIGHUP 
    ################################################################################ 
    $SIG{HUP} = sub { 
        # Re-read some config file - probably using same sub that we used at startup 
        open(my $fh, '>', '/tmp/status.txt'); 
        print $fh "Re-read config file\n"; 
        close $fh; 
    }; 
    
    ################################################################################ 
    # Report remaining time on SIGUSR1 
    ################################################################################ 
    $SIG{USR1} = sub { 
        # Subtract something from something and report difference 
        open(my $fh, '>', '/tmp/status.txt'); 
        print $fh "Time remaining = 42\n"; 
        close $fh; 
    }; 
    
    ################################################################################ 
    # Main loop 
    ################################################################################ 
    while ($continue) { 
        sleep 1; 
    } 
    

    당신은 다음과 HUP 신호 또는 USR1 신호를 보낼 것이다 밖으로에 대한 /tmp/status.txt 봐 봐 데몬에서 꺼내. 위의 명령은 Perl 스크립트를 으로 저장했다고 가정합니다. 다른 이름을 사용하면 조정하십시오.

    또는 시작시 해당 파일에 pid을 쓰고 pkill-F 옵션을 사용할 수 있습니다.

    +0

    실제로 소켓을 사용하는 것보다 쉽고 포괄적 인 방법입니다. 정말 고맙습니다 :) ! – cocosushi

    -2

    데몬과 통신하는 데는 몇 가지 방법이 있지만 UNIX 도메인 소켓이 가장 적합하다고 생각합니다. 펄에서는 IO::Socket::UNIX이 보일 것이다.

    +0

    정확히 내가 찾고있는 것입니다. 감사 ! :) – cocosushi

    +0

    @cocosushiTS : 확실한가요? 소켓으로 프로그래밍 한 적이 있습니까? 옳다는 것은 사소한 것이 아닙니다. – Borodin