2016-12-19 124 views
-1

我想製作一個腳本,可以在一定的時間內阻止對某些域的請求,並在相同的時間內終止特定的進程。在後臺運行Perl腳本並向其發送命令

我想有一個像守護進程,我可以發送命令。 例如,要看到多少時間留給與some_script timeleft, 開始這將通過類似some_script start, 或添加一個新的域/工藝製造的守護進程等

我什麼卡住on是:

  • 如何創建一個守護進程?我見過this

  • 我不知道如何從一個命令行

我希望我已經在我的解釋不夠清楚命令發送到後臺程序。

+1

爲什麼不讓它基於HTTP,所以你不必創造一個全新的服務器(這遠遠超出你的技能)? – ikegami

+1

@cocosushiTS:你可以從頭編寫自己的服務器,或者你可以使用現有的模塊來創建HTTP服務器。 – Borodin

+1

@cocosushiTS:你可以使用你選擇的任何進程間通信來創建你自己的服務器。套接字是一種方式,但它們的工作水平很低,您將不得不設計一個簡單的協議。由於有很多現成的軟件來實現一個HTTP服務器,所以寫一些能夠響應HTTP請求的東西是很有意義的,這個HTTP請求大多是明文 – Borodin

回答

1

我可能會使用你參考答案的骨頭,但增加:

  • SIGHUP其處理程序重新讀取IP地址的配置文件壓制,並

  • 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寫入文件,並使用-F選項至pkill

+0

它的確比Sockets更容易,更全面。非常感謝 :) ! – cocosushi

-2

有幾種與守護進程通信的方式,但我認爲UNIX域套接字最有意義。在Perl中,IO::Socket::UNIX將是一件值得關注的事情。

+0

這正是我所期待的。謝謝 ! :) – cocosushi

+0

@cocosushiTS:你確定嗎?你有沒有使用套接字進行任何編程?正確的做法並不是微不足道的。 – Borodin

相關問題