使Perl脚本作为守护程序在Linux中运行的简单方法是什么?
目前,这是在CentOS上。我希望它从系统启动,然后从系统关闭,因此一些/etc/rc.d/init.d集成也不错,但是我总是可以向添加一个自定义行/etc/rc.d/rc.local。
/etc/rc.d/init.d
/etc/rc.d/rc.local
最简单的方法是使用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的所有操作:
"/"
与运行级别系统集成很容易。在中,您需要一个类似以下的脚本(XXXXXXXXXXXX用Perl脚本的名称,YYYYYYYYYYYYYYYYYYY其功能描述以及/path/toPerl脚本的路径替换)/etc/init.d。由于使用的是CentOS,一旦将脚本包含在中/etc/init.d,就可以使用chkconfig在各种运行级别中将其关闭或打开。
XXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYY
/path/to
/etc/init.d
#!/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/functions binary="/path/to/XXXXXXXXXXXX" [ -x $binary ] || exit 0 RETVAL=0 start() { 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}" ;; esac exit 0