![RHEL6 无法让我的脚本在关机和重新启动时运行](https://linux22.com/image/39456/RHEL6%20%E6%97%A0%E6%B3%95%E8%AE%A9%E6%88%91%E7%9A%84%E8%84%9A%E6%9C%AC%E5%9C%A8%E5%85%B3%E6%9C%BA%E5%92%8C%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E6%97%B6%E8%BF%90%E8%A1%8C.png)
我试图在每次关闭和重新启动时执行脚本,但该脚本从未运行。
- 我创建了脚本 baseRhel64 并将其保存到
/etc/rc.d/init.d
- 我做到了
chkconfig --add baseRhel64
我在脚本中包含了
#chkconfig --list # chkconfig: 06 10 10
- 我验证了 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”。
答案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 在当前运行级别中运行的守护进程将在停止时被调用,并且使用stop
arg 重新启动,前它得到了它应该得到的服务开始。
如果您希望脚本最后运行,在杀死所有内容然后停止计算机之前,请检查最高的值(我的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
已测试并工作