데몬스트레이션 할 Perl 스크립트가 있습니다. 기본적으로이 perl 스크립트는 30 초마다 디렉토리를 읽고, 찾은 파일을 읽은 다음 데이터를 처리합니다. 그래서이 스크립트는 기본적으로 뭔가 매 3 초마다 인쇄/etc/init.d 스크립트의 데몬 호출이 백그라운드에서 실행 중이 아닌 블로킹 중입니다.
#!/usr/bin/perl
use strict;
use warnings;
my $continue = 1;
$SIG{'TERM'} = sub { $continue = 0; print "Caught TERM signal\n"; };
$SIG{'INT'} = sub { $continue = 0; print "Caught INT signal\n"; };
my $i = 0;
while ($continue) {
#do stuff
print "Hello, I am running " . ++$i . "\n";
sleep 3;
}
: 간단 여기에 다음과 같은 펄 스크립트를 고려 유지하기 위해 (synpipe_server 전화를 /usr/sbin/
에서이 스크립트의 심볼릭 링크가있다).
#!/bin/bash
# synpipe_server : This starts and stops synpipe_server
#
# chkconfig: 12345 12 88
# description: Monitors all production pipelines
# processname: synpipe_server
# pidfile: /var/run/synpipe_server.pid
# Source function library.
. /etc/rc.d/init.d/functions
pname="synpipe_server"
exe="/usr/sbin/synpipe_server"
pidfile="/var/run/${pname}.pid"
lockfile="/var/lock/subsys/${pname}"
[ -x $exe ] || exit 0
RETVAL=0
start() {
echo -n "Starting $pname : "
daemon ${exe}
RETVAL=$?
PID=$!
echo
[ $RETVAL -eq 0 ] && touch ${lockfile}
echo $PID > ${pidfile}
}
stop() {
echo -n "Shutting down $pname : "
killproc ${exe}
RETVAL=$?
echo
if [ $RETVAL -eq 0 ]; then
rm -f ${lockfile}
rm -f ${pidfile}
fi
}
restart() {
echo -n "Restarting $pname : "
stop
sleep 2
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status ${pname}
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
;; esac
exit 0
그래서 (나는 경우도 디먼에 대한 문서를 이해) :이 스크립트를 디먼 화 원하는대로
다음, 나는 또한 /etc/init.d/
이 bash는 스크립트 (또한 synpipe_server)를 넣었습니다 펄 스크립트는 백그라운드에서 실행해야 내가 실행하면 출력이 /dev/null
로 리디렉션해야합니다 여기
service synpipe_server start
을하지만 것은 내가 대신 무엇을 얻을 수 있습니다 :
[[email protected] init.d]# service synpipe_server start
Starting synpipe_server : Hello, I am running 1
Hello, I am running 2
Hello, I am running 3
Hello, I am running 4
Caught INT signal
[ OK ]
[[email protected] init.d]#
그래서 Perl 스크립트를 시작하지만 현재 터미널 세션에서 분리하지 않고 실행합니다. 내 콘솔에 출력물이 표시되는 것을 볼 수 있습니다 ... 이것은 내가 기대했던 것이 아닙니다. 또한 PID 파일은 비어 있습니다 (또는 줄 바꿈 전용으로, 데몬에 의해 반환 된 PID 없음).
내가 뭘 잘못하고 있는지 알 수있는 사람이 있습니까?
EDIT : 아마 내가 Red Hat 시스템에 있다고 말할 것입니다.
Scientific Linux SL release 5.4 (Boron)
감사합니다, man daemon
올바른 구문에 따르면 토니
대신의 변화를 폴링하는 데몬을 작성, 당신은 때 변경 사항을 알려 http://en.wikipedia.org/wiki/Inotify을 inotify를 사용할 수 있습니다 그것이 일어났다. 코드를 작성하는 것이 더 쉽고 효율적이며 업데이트를 더 빠르게 볼 수 있습니다. CPAN 모듈은 여러 가지가 있습니다. http://search.cpan.org/search?query=inotify&mode=all – Schwern
감사합니다.이 정보는 유용합니다. Inotify를 살펴 보겠습니다. – tony
@Schwern : inotify 알림을 기다리는 백그라운드에서 데몬을 실행해야한다는 사실을 변경하지 않습니다. – tony