如何使用inittab文件执行Linux shell脚本

如何使用inittab文件执行Linux shell脚本,linux,bash,Linux,Bash,我创建了一个包含以下内容的shell脚本 #!/bin/bash TMP_FILE=/tmp/inet_up no_inet_action(){ reboot } HOUR="$(date +'%H')" if [ $HOUR -le 22 -a $HOUR -ge 9 ]; then if ping -c5 192.168.7.100; then echo "Internet OK">$TMP_FILE else echo "No Internet">

我创建了一个包含以下内容的shell脚本

#!/bin/bash
TMP_FILE=/tmp/inet_up
no_inet_action(){
    reboot
}
HOUR="$(date +'%H')"
if [ $HOUR -le 22 -a $HOUR -ge 9 ]; then
  if ping -c5 192.168.7.100; then
    echo "Internet OK">$TMP_FILE
  else
    echo "No Internet">$TMP_FILE
    no_inet_action
  fi
fi
它将在09:00至22:00期间ping一个IP地址,如果没有internet连接,它将在文件中写入一行并重新启动设备。我在inittab中放了下面一行,希望它每隔5分钟运行一次。我在
/tmp
文件夹中没有看到该文件。脚本是可执行的。正确的执行方式是什么?我看到一些博客建议把它放在
/etc/init.d
下;哪条路对

inittab
位于
/etc/
文件夹中

    ::respawn:/sbin/delayexec 600 /etc/check_inet.sh

在四处搜索并尝试了几个小时后,找到了解决方案。 如果我把以下内容放在inittab文件中,对我来说就可以了。因此,我不需要像专家在评论中提到的那样使用crontab(我不是Linux专家,也没有时间调查细节,只需要让工作成为我的任务)。希望这对inittab的其他部分内容有所帮助

::respawn:/sbin/delayexec 300 /bin/sh /etc/check_inet.sh
以下是我在删除echo命令后使用的最后一段代码:

#!/bin/bash
no_inet_action(){
reboot
}
HOUR="$(date +'%H')"
if [ $HOUR -le 22 -a $HOUR -ge 9 ]; then
if ping -c5 192.168.7.100; then
else
no_inet_action
fi
fi

这取决于您的分布情况。您描述了一个经典的方法,但现在许多发行版都避开了经典的
init
行为。例如,那些依赖于
systemd
的人会完全忽略
/etc/inittab
。我检查我的系统是Linux 3.6.9+armv5tejl。你可能应该为此使用
cron
cron
是一个按计划执行脚本的实用程序)。@RotatingWheel,它告诉我们内核,但是init系统不是内核的一部分;我们需要知道发行版是什么。@RotatingWheel,…*理想情况下*,您的发行版将有一个真正的过程监控系统——上面提到的systemd;还有runit、upstart、DJB daemontools、launchd和许多其他工具。无论您的操作系统供应商支持哪一个,请选择正确的选项。(如果您正在构建自己的发行版,即基于嵌入式系统的发行版,我强烈建议,或者,甚至更好,这两种发行版都构建得非常小和简单)。