让一个Perl脚本在linux中作为守护进程运行的简单方法是什么?
目前,这是在CentOS上。我希望它启动系统并关闭系统,因此一些/etc/rc.d/init.d
集成也会很好,但我总是可以向/etc/rc.d/rc.local
添加自定义行。
答案 0 :(得分:81)
最简单的方法是使用Proc::Daemon。
#!/usr/bin/perl
use strict;
use warnings;
use Proc::Daemon;
Proc::Daemon::Init;
my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };
while ($continue) {
#do stuff
}
或者你可以完成Proc :: Daemon所做的所有事情:
"/"
。与运行级别系统集成非常简单。您需要一个如下所示的脚本(在{{1中将XXXXXXXXXXXX
替换为Perl脚本的名称,YYYYYYYYYYYYYYYYYYY
及其作用的描述,以及/path/to
,其中包含Perl脚本的路径) }}。由于您使用的是CentOS,因此一旦您在/etc/init.d
中拥有该脚本,您就可以使用chkconfig在各种运行级别中将其关闭或打开。
/etc/init.d
答案 1 :(得分:39)
如果您没有Chas建议的Proc::Daemon。欧文斯,以下是你手工操作的方法:
sub daemonize {
use POSIX;
POSIX::setsid or die "setsid: $!";
my $pid = fork() // die $!; #//
exit(0) if $pid;
chdir "/";
umask 0;
for (0 .. (POSIX::sysconf (&POSIX::_SC_OPEN_MAX) || 1024))
{ POSIX::close $_ }
open (STDIN, "</dev/null");
open (STDOUT, ">/dev/null");
open (STDERR, ">&STDOUT");
}
答案 2 :(得分:7)
我认为最简单的方法是使用daemon。它允许您作为守护程序运行任何进程。这意味着,如果您决定更改为python,则不必担心库。要使用它,只需使用:
daemon myscript args
这应该适用于大多数发行版,但默认情况下可能没有安装。
答案 3 :(得分:0)
我使用超级用户来运行perl脚本。
作为系统管理员,我希望最大程度地减少服务器之间的变化和变化,并坚持核心服务或最低限度的要求。
Supervisor已经安装并且可用于python-flask应用程序 在同一个盒子上运行。因此,我只是为要作为服务运行的perl脚本添加了一个conf文件。现在,我可以做
supervisorctl start/stop/restart my_perl_script_supervisor_service_name