/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(또는 해당 배포판이 없는 경우 해당 배포판)을 통해 실행할 수 있습니다. 하나). ..)