我想创建一个脚本,以防止在一定时间内对某些域的请求, 并在相同的时间内杀死特定进程。
我想要一个守护进程,我可以发送命令。
例如,要查看剩余时间,请some_script timeleft
,
启动将由some_script start
之类的东西创建的守护进程,
或者添加新的域/进程等。
我坚持的是:
如何创建守护进程?我见过this
我不知道如何从命令行向守护程序发送命令
我希望我在解释中已经足够清楚了。
答案 0 :(得分: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
。
答案 1 :(得分:-2)
有几种方法可以与守护进程通信,但我认为UNIX域套接字最有意义。在perl中,IO::Socket::UNIX
将是一个值得关注的东西。