2016-12-19 73 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

相关问题