Linux에서 Perl 스크립트를 시스템 데몬으로 실행하려면 어떻게해야합니까?
Linux에서 데몬으로 실행할 Perl 스크립트를 얻는 간단한 방법은 무엇입니까?
현재 이것은 CentOS에 있습니다. 시스템과 함께 시작하고 시스템과 함께 종료하기를 원하므로 일부 /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/to
Perl 스크립트 경로로 대체 ) /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/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
Chas가 제안한 Proc :: Daemon 이없는 경우 . Owens, 다음은 수작업으로 수행하는 방법입니다.
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");
}
가장 쉬운 방법은 daemon 을 사용하는 것 입니다. 모든 프로세스를 데몬으로 실행할 수 있습니다. 이것은 예를 들어 파이썬으로 변경하기로 결정한 경우 라이브러리에 대해 걱정할 필요가 없음을 의미합니다. 그것을 사용하려면 다음을 사용하십시오.
daemon myscript args
This should be available on most distros, but it might not be installed by default.
ReferenceURL : https://stackoverflow.com/questions/766397/how-can-i-run-a-perl-script-as-a-system-daemon-in-linux
'program tip' 카테고리의 다른 글
Vue Js-v-for X 회 (범위 내)를 통한 루프 (0) | 2020.12.15 |
---|---|
현재 비밀번호를 모르면 asp.net 멤버십 공급자를 사용하여 해시 된 비밀번호를 어떻게 변경합니까? (0) | 2020.12.15 |
a의 텍스트를 맨 위로 정렬하고 싶습니다. (0) | 2020.12.15 |
Git 저장소 Gitolite를 삭제 하시겠습니까? (0) | 2020.12.15 |
PHP를 사용하여 MySQL 데이터베이스에 저장하는 IP 주소 (0) | 2020.12.15 |