在etcinit.d脚本中如何检测networking初始化?

在etcinit.d脚本中如何检测networking初始化?,第1张

概述在/etc/init.d脚本中如何检测networking初始化

我有一个启动时启动的/etc/init.d/脚本,需要联网。 我已经将rc start设置为99,所以这是加载的最后一件事情,但是networking不能立即加载,我目前不得不依靠30秒的睡眠命令来等待networking加载。

*** 作系统是Ubuntu修改的embedded式系统(Yocto项目)。 文件系统是一样的,但服务非常有限,所以它使用Sysvinit。

有没有办法检查所有的networking已经完成加载?

这是脚本,如果它是帮助:

发现忽略我search的第一个文件名

为什么卸载Apache2尝试安装PHP5-CGI?

pipe道输出切割

跟踪多个ksh的命令的历史logging

linuxselect带额外选项的语句

#!/bin/sh # # Daemon name: blerd # # chkconfig: - 3 99 1 # description: M3 Bluetooth Low Energy Relay Daemon # Source function library. . /etc/init.d/functions PROGRAM=bler LOCKfile=/var/lock/subsys/$PROGRAM start() { [ -x $EXE ] || exit 5 echo -n "Starting $PROGRAM: "; if [ -e $LOCKfile ]; then echo "Instance of $PROGRAM exists." return 0; fi sleep 30 $PROGRAM RETVAL=$? if [ $RETVAL -eq 0 ]; then echo "Success" else echo "Failed" fi [ $RETVAL -eq 0 ] && touch $LOCKfile return $RETVAL } stop() { echo -n "StopPing $PROGRAM: " if [ ! -e $LOCKfile ]; then echo "No instance of $PROGRAM exists." return 0; fi killproc $PROGRAM RETVAL=$? if [ $RETVAL -eq 0 ]; then echo "Success" else echo "Failed" fi [ $RETVAL -eq 0 ] && rm -f $LOCKfile return $RETVAL } status() { echo -n "Status $PROGRAM: " if [ -e $LOCKfile ]; then echo "Running" else echo "Stopped" fi return 0; } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 2 ;; esac

sed如何删除文件中的前17行和后8行

挂在console2中运行的bash进程

如何使用bash获取当前每个月的最后一天,而不使用if else或switch或while循环?

如何用filter链过滤行

运行从networkingcurl的bash脚本

基本的Debian方式 :

基本上/etc/network/if-up.d是这样的脚本的地方。 当一个接口在Debian系统或派生类似的Ubuntu上调用这些脚本。 在这里您可以找到传递给这些脚本的环境变量列表。 使用这些变量,您可以决定哪个接口正在启动,以及接口配置的详细信息。 在查看/etc/network/if-up.d时可以找到这样的scipt的例子

一个示例脚本可能看起来像这样(从samba包派生出来,只是为了解释工作原理,如果你使用Ubuntu,你应该使用upstart稍后会解释)

/etc/network/if-up.d/your-service

#!/bin/sh # Try to bring nmbd up when an interface comes up,if smbd is already running. # Don't bother to do anything for lo. if [ "$IFACE" = lo ]; then exit 0 fi # Only run from ifup. if [ "$MODE" != start ]; then exit 0 fi # we only care about inet and inet6. case $ADDRFAM in inet|inet6|NetworkManager) ;; *) exit 0 ;; esac # start the service invoke-rc.d your-service start >/dev/null exit 0

请注意 ,你需要

chmod +x /etc/network/if-up.d/your-service

Ubuntu / Upstart :

Ubuntu正在使用upstart作为sysvinit替代品。 如果你正在研究/etc/network/if-up.d/你会发现这个upstart已经在那里放了一个钩子。 这个钩子是更详细的upstart机制的基础,它提供了启动服务的可能性,除非某个网络接口已经被提出。 upstart钩子将触发事件net-device-up并通过IFACE , LOGICAL , ADDRFAM和METHOD作为参数。 你在服务的贵族脚本中使用这个钩子(就像@Guy提到的):

start on net-device-up IFACE=eth0

如果你在Ubuntu上,这个问题被标记,请考虑使用Ubuntu新贵

除了非常简单之外,您还可以:

start on net-device-up IFACE=eth0

欲了解更多信息,请参阅整个新贵食谱

总结

以上是内存溢出为你收集整理的在/etc/init.d脚本中如何检测networking初始化?全部内容,希望文章能够帮你解决在/etc/init.d脚本中如何检测networking初始化?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1272169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存