我已将脚本设置为使用该/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 (或者您的发行版等效项,如果您没有的话)运行它...)