如何在驱动程序重新启动时自动运行脚本?

如何在驱动程序重新启动时自动运行脚本?

我正在尝试在 shell 脚本(名为 driver_check.sh)上设置自动运行,该脚本将在重新启动驱动程序时触发。

基本上,我的脚本如下所示:

#!/bin/bash
echo "Start script"
    now=$(date +"%T")
    LOGFILE_HOME=/var/opt/mydriver/log/startupFail.log
echo "======== LOG EVENT CHECKING ========" >> $LOGFILE_HOME
echo "DATE: $(date +%Y-%m-%d ) $now" >> $LOGFILE_HOME
echo "------------------" >> $LOGFILE_HOME
for loop in {1..3}
do
        echo $loop
        echo "Loop $loop" >> $LOGFILE_HOME
        now=$(date +"%T")
        echo "Current time : $now"

        if grep -iq success /var/opt/mydriver/log/driver.log
        then 
            echo "ok"
            break

        else
            if [ $loop = 3 ]
            then 
                    #send email
                    mail -s "Fail to restart/reboot" [email protected]

                    echo "Fail"
                    echo "Fail" >> $LOGFILE_HOME
                    echo "An email has sent>> $LOGFILE_HOME
            fi  
        fi  


        ((loop ++));
        sleep 3


    done

我尝试在脚本的开头添加这一行

chmod 755 driver_check.sh

我还将文件移动到 /etc/init.d 当我重新启动驱动程序时,脚本仍然不会自动运行。我还应该做什么才能让它发挥作用?非常感谢你们提供的任何建议。

答案1

将脚本放在 /etc/init.d 中不足以在重新启动时执行它。根据您的 Linux 发行版,您应该检查运行级别以及如何在启动时运行脚本(init.d、systemd、rc.d ....)

在 redhat/CentOS < 7 上,您可以chkconfig[1] 来管理这些事情,将正确的标头添加到您的脚本中,它将自动创建正确的链接,以便脚本将在正确的运行级别启动。

[1] 在 redhat 7 和 CentOS 7 上此工具不管理 systemd 服务

答案2

您可以使用 udev 在硬件更改时执行命令。我不能说更多如何使用它,但它肯定会对您有所帮助。

相关内容