2016-12-19 7 views
-1

特定の時間に特定のドメインへのリクエストを防ぐスクリプト( )を作成し、同じ時間内に特定のプロセスを強制終了します。バックグラウンドでPerlスクリプトを実行してコマンドを送信してください

私はコマンドを送ることができるデーモンのようなものを持っていたいと思います。 例えば、私がこだわっている何some_script start、 または新しいドメイン/プロセスを追加するような何かによって作成されるデーモンなど

を開始するには、some_script timeleftで、残っているどのくらいの時間 を表示するにはon:

  • デーモンの作成方法は?私は私が私が私の説明で十分に明らかにされている願っていますコマンドライン

からデーモンにコマンドを送信する方法がわからない

  • thisを見てきました。

  • +1

    これはHTTPベースなので、まったく新しいサーバーを開発する必要はありません。 – ikegami

    +1

    @cocosushiTS:自分でサーバーを作成したり、既存のモジュールを使用してHTTPサーバーを作成することができます。 – Borodin

    +1

    @cocosushiTS:選択したプロセス間通信を使用して独自のサーバーを作成できます。ソケットは一方向ですが、非常に低いレベルで動作し、単純なプロトコルを設計する必要があります。HTTPサーバーを実装するにはあまりにも多くの既製のソフトウェアがあるので、ほとんどのプレーンテキストであるHTTP要求に応答するものを書くのは理にかなっています。 – Borodin

    答えて

    1

    私はおそらくあなたが参照答えの骨を使用しますが、追加します。

    • IPの設定ファイルを抑制するために、再読み込み、および、

    • SIGHUPのハンドラを残っている時間を報告するSIGUSR1のハンドラ。だから、

    、それはおおよそ次のようになります。

    #!/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シグナルを送信します:

    pkill -HUP daemon.pl 
    

    または

    pkill -USR1 daemon.pl 
    

    アウトについては/tmp/status.txtを見てくださいデーモンから出してください。上記のコマンドは、Perlスクリプトをdaemon.plとして保存したと仮定しています。別の名前を使用した場合は調整してください。

    また、起動時にデーモンがpidをファイルに書き込んで、pkill-Fオプションを使用することもできます。

    +0

    これは実際にソケットを使用するよりも簡単で包括的な方法です。どうもありがとうございます :) ! – cocosushi

    -2

    デーモンと通信するにはいくつかの方法がありますが、UNIXドメインソケットが最も理にかなっていると思います。 perlでは、IO::Socket::UNIXは見るべきことになります。

    +0

    これはまさに私が探していたものです。ありがとう! :) – cocosushi

    +0

    @cocosushiTS:本当ですか?あなたはソケットでプログラミングをしたことがありますか?正しいことは自明ではありません。 – Borodin

    関連する問題