与/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 (或者您的发行版等效项,如果您没有的话)运行它...)

相关内容