在后台运行Perl脚本并发送命令

时间:2016-12-19 20:59:04

标签: linux perl daemon

我想创建一个脚本,以防止在一定时间内对某些域的请求, 并在相同的时间内杀死特定进程。

我想要一个守护进程,我可以发送命令。 例如,要查看剩余时间,请some_script timeleft, 启动将由some_script start之类的东西创建的守护进程, 或者添加新的域/进程等。

我坚持的是:

  • 如何创建守护进程?我见过this

  • 我不知道如何从命令行向守护程序发送命令

我希望我在解释中已经足够清楚了。

2 个答案:

答案 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将是一个值得关注的东西。