RHEL6 无法让我的脚本在关机和重新启动时运行

RHEL6 无法让我的脚本在关机和重新启动时运行

我试图在每次关闭和重新启动时执行脚本,但该脚本从未运行。

  1. 我创建了脚本 baseRhel64 并将其保存到/etc/rc.d/init.d
  2. 我做到了chkconfig --add baseRhel64
  3. 我在脚本中包含了

    #chkconfig --list
    # chkconfig: 06 10 10
    
  4. 我验证了 S10 脚本是在/etc/rc0.d/S10baseRhel64和下创建的/etc/rc6.d/S10baseRhel64

以下是我的脚本:

#!/bin/sh

#chkconfig --list
# chkconfig: 06 10 10

start(){
    echo "`basename $0` start"
    touch /root/installscripts/test1
}

stop(){
    echo "`basename $0` stop"
    touch /root/installscripts/test2
    touch /root/installscripts/"`basename $0`"
}

case "$1" in
    start) start;;
    stop) stop;;
    *) 
    echo $"Usage: $0 {start|stop}"
    RETCAL=1
esac
exit 0

答案1

当您在 RH EL 6 中配置自定义初始化脚本(例如命名为“service_name”)时,您必须注意在其启动阶段创建锁定文件 /var/lock/subsys/service_name,否则该脚本将不会在启动阶段执行。关闭系统(init 0 或 init 6)。同时,您应该在锁定文件的停止阶段设置“rm -f”。

https://access.redhat.com/solutions/701383

答案2

/etc/rc0.d如果您检查和中的内容/etc/rc6.d,您将看到在获得服务之前,系统将首先运行 a killall(优先级 00),然后运行 ​​a halt(优先级 01)。

尽管您的服务计划接下来运行,但计算机已经停止运行。

lrwxrwxrwx 1 root root 17 Sep 28  2012 S00killall -> ../init.d/killall
lrwxrwxrwx 1 root root 14 Sep 28  2012 S01halt -> ../init.d/halt
lrwxrwxrwx 1 root root 14 Jul  8 21:16 S10test -> ../init.d/test

如果我是你,我会做的是在你通常使用的运行级别中启用脚本,然后345将启动与停止交换,因为所有 chkconfig:ed 在当前运行级别中运行的守护进程将在停止时被调用,并且使用stoparg 重新启动,它得到了它应该得到的服务开始

如果您希望脚本最后运行,在杀死所有内容然后停止计算机之前,请检查最高的值(我的K92iptables,所以对我来说,停止优先级> 92)。

首先chkconfig --del baseRhel64,然后更改脚本,以便该chkconfig行读取# chkconfig: 345 10 93

然后,您的脚本将如下所示,交换启动和停止函数名称:

#!/bin/sh

#chkconfig --list
# chkconfig: 345 10 93

stop(){
    echo "`basename $0` stop"
    touch /root/installscripts/test1
}

start(){
    echo "`basename $0` start"
    touch /root/installscripts/test2
    touch /root/installscripts/"`basename $0`"
}

case "$1" in
    start) start;;
    stop) stop;;
    *);;
    echo $"Usage: $0 {start|stop}"
    RETCAL=1
esac
exit 0

答案3

我有一个很好的解决方案给你a)像这样的脚本

#!/bin/sh
#
# localshutdown
#
# chkconfig:   06 01 25
# description: localshutdown script
#              

### BEGIN INIT INFO
# Provides: 
# Required-Start: 
# Required-Stop: 
# Should-Start: 
# Should-Stop: 
# Default-Start: 0 6 
# Default-Stop:
# Short-Description: 
# Description:      
### END INIT INFO

# Source function library.

start() {
    echo "Your commands here"
    touch /root/funziona #use it for a test
}

stop() {
    echo "nothing" >/dev/null 2>&1
}

restart() {
    stop
    start
}

case "$1" in
    start)
        start
        $1
        ;;
    stop)
        stop
        $1
        ;;
    restart)
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 2
esac
exit $?

然后

chkconfig --add /etc/init.d/yourscript.sh

然后

chkconfig --level 06 yourscript.sh on
chkconfig --level 12345 yourscript.sh off

已测试并工作

相关内容