如何使用inittab文件执行Linux shell脚本
我创建了一个包含以下内容的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">
#!/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和许多其他工具。无论您的操作系统供应商支持哪一个,请选择正确的选项。(如果您正在构建自己的发行版,即基于嵌入式系统的发行版,我强烈建议,或者,甚至更好,这两种发行版都构建得非常小和简单)。