qq_笑_17
最简单的方法是使用Proc :: Daemon。#!/usr/bin/perluse strict;use warnings;use Proc::Daemon;Proc::Daemon::Init;my $continue = 1;$SIG{TERM} = sub { $continue = 0 };while ($continue) { #do stuff}或者,您可以执行Proc :: Daemon的所有操作:分叉一个孩子并退出父进程。成为会话负责人(将程序与控制终端分离)。分叉另一个子进程并退出第一个子进程。这防止了获得控制终端的可能性。将当前工作目录更改为"/"。清除文件创建掩码。关闭所有打开的文件描述符。与运行级别系统集成很容易。在中,您需要一个类似以下的脚本(XXXXXXXXXXXX用Perl脚本的名称,YYYYYYYYYYYYYYYYYYY其功能描述以及/path/toPerl脚本的路径替换)/etc/init.d。由于使用的是CentOS,一旦将脚本包含在中/etc/init.d,就可以使用chkconfig在各种运行级别中将其关闭或打开。#!/bin/bash## XXXXXXXXXXXX This starts and stops XXXXXXXXXXXX## chkconfig: 2345 12 88# description: XXXXXXXXXXXX is YYYYYYYYYYYYYYYYYYY# processname: XXXXXXXXXXXX# pidfile: /var/run/XXXXXXXXXXXX.pid### BEGIN INIT INFO# Provides: $XXXXXXXXXXXX### END INIT INFO# Source function library.. /etc/init.d/functionsbinary="/path/to/XXXXXXXXXXXX"[ -x $binary ] || exit 0RETVAL=0start() { echo -n "Starting XXXXXXXXXXXX: " daemon $binary RETVAL=$? PID=$! echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/XXXXXXXXXXXX echo $PID > /var/run/XXXXXXXXXXXX.pid}stop() { echo -n "Shutting down XXXXXXXXXXXX: " killproc XXXXXXXXXXXX RETVAL=$? echo if [ $RETVAL -eq 0 ]; then rm -f /var/lock/subsys/XXXXXXXXXXXX rm -f /var/run/XXXXXXXXXXXX.pid fi}restart() { echo -n "Restarting XXXXXXXXXXXX: " stop sleep 2 start}case "$1" in start) start ;; stop) stop ;; status) status XXXXXXXXXXXX ;; restart) restart ;; *) echo "Usage: $0 {start|stop|status|restart}" ;;esacexit 0