/etc/init.d와 유사한 방법

/etc/init.d와 유사한 방법

/etc/init.d이 방법을 사용하여 실행 되도록 스크립트를 설정했습니다 . 모두 괜찮습니다. 문제는 내 스크립트가 패킷 캡처를 수행하고 로드 후 컴퓨터를 다시 시작하면 crond내 스크립트가 로드되고 패킷 캡처 프로세스가 해당 지점에서 시작되고 더 이상 진행되지 않는다는 것입니다. Linux가 완전히 로드되었을 때만 강제로 시작되도록 하는 방법이 있습니까?

아래는 내 스크립트의 모습입니다.

#!/bin/bash
# chkconfig: 2345 95 05
# myapp daemon
# description: myapp daemon
# processname: myapp

DAEMON_PATH="/usr/local/bin/"
DAEMON=pc1.c
#DAEMONOPTS="-my opts"
NAME=pc1.c
DESC="my packet capture"

PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

case "$1" in
start)
    printf "%-50s" "Starting $NAME..."
    insmod /usr/local/pfring/kernel/pf_ring.ko
    /usr/local/bin/pc1.c &
    $! > PIDFILE    
;;
status)
        if [ -f $PIDFILE]; 
        then if [ -d /proc/cat $PIDFILE ]; 
             then echo "Process is running"; 
             fi; 
        else echo "Error! PID file is missing!"; 

        fi

;;
stop)
        printf "%-50s" "Stopping $NAME"
            PID=`cat $PIDFILE`
            cd $DAEMON_PATH
        if [ -f $PIDFILE ]; then
            kill -HUP $PID
            printf "%s\n" "Ok"
            rm -f $PIDFILE
        else
            printf "%s\n" "pidfile not found"
        fi
;;
restart)
    $0 stop
    $0 start 
;;
*)
        echo "Usage: $0 {status|start|stop|restart}"
        exit 1
esac

답변1

명령 끝에 "&"를 붙여 init.d 스크립트에서 명령을 실행하면 백그라운드 프로세스가 되어 다음 서비스를 시작할 수 있습니다.

부팅 프로세스의 마지막 단계로 스크립트를 실행하려면(백그라운드가 아닌 경우 여전히 차단됨) /etc/rc.local(또는 해당 배포판이 없는 경우 해당 배포판)을 통해 실행할 수 있습니다. 하나). ..)

관련 정보