我想在我加入或离开某些网络时设置我的计算机运行某些命令(例如:在工作时启动Synergy;在家中使用lan时启动ssh,以便可以同步等等)。是否有类似于iwevent的命令来监视eth0状态?
我找到了iwevent,它将事件输出到我可以观看的无线接口。但是,当eth0连接或断开连接时,我找不到要观看的对等物。 我试过ip monitor
但是有太多的数据输出我无法正确使用它。
是否有任何命令可用于监视eth0的状态更改? Python可用的API也可以工作。
我想在我加入或离开某些网络时设置我的计算机运行某些命令(例如:在工作时启动Synergy;在家中使用lan时启动ssh,以便可以同步等等)。是否有类似于iwevent的命令来监视eth0状态?
我找到了iwevent,它将事件输出到我可以观看的无线接口。但是,当eth0连接或断开连接时,我找不到要观看的对等物。 我试过ip monitor
但是有太多的数据输出我无法正确使用它。
是否有任何命令可用于监视eth0的状态更改? Python可用的API也可以工作。
使用netstat -i -c
将运行时间可持续每秒....
[email protected]:~$ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth1 1500 0 22259 0 0 0 13558 0 0 0 BMRU lo 16436 0 0 0 0 0 0 0 0 0 LRU [email protected]:~$
然后,它的grepping了下 'RX-OK' 列的问题(收到OK)和 'TX-OK'(传输OK)...
有趣的是,对于eth0来说适度地工作,虽然它不是最佳的。 我可能通过自己轮询另一个命令获得相同的结果。 对我来说,即使断开连接,wlan0也总是报告正常。 我可以听iwevent并使用另一个命令来检查eth0,但如果eth0可能的话,我更喜欢实际的事件。 – 2010-03-07 02:15:49
@daniel:嗯......我不会100%自信地说,如果你想要可移植性,它可以在另一个* nix变体下工作......但是可以想象netstat输出在所有linux类型中都是相同的.... – t0mm13b 2010-03-07 02:44:36
#!/bin/bash
interface="eth0"
val=0
sec=10 #seconds to sleep
while true
do
val=$(netstat -I="$interface" | awk 'END{print $8}')
if [ "$val" != "$p" ];then
echo "Interface: $interface ok"
else
echo "Interface: $interface no activity for $sec seconds"
fi
sleep $sec
p=$val
done
我设法自己解决了这个问题。
ip monitor link | grep --line-buffered '\(eth0\|wlan0\).\+state \+\(DOWN\|UP\)' - | awk '{print $2$9}'
即命令打印出链路状态变化到接口,里grep出的是关于状态和是向下或向上(为wlan0还输出我不需要DORMANT状态),然后具体为eth0或为wlan0线使用awk,以便它只输出接口和状态信息。
该命令输出“eth0:DOWN”和“wlan0:UP”等行。
我可以将其转换为shell脚本,也许可以使用sed来替换:用空格和分隔信息。
至少在Debian和Ubuntu上,激活网络接口将运行/etc/network/if-up.d/
中的脚本(并且存在用于停用的对称if-down.d
目录)。所以你可以在那里添加你自己的脚本。这些脚本通过几个环境变量获取信息,这在interfaces
手册页中有记录。
该主题有一个page in the Ubuntu wiki。
使用默认的Ubuntu配置和相当现代化的网卡,接口在电缆插入时自动激活。 (de)手动激活接口的命令是ifup eth0
和ifdown eth0
;或者如果您愿意,可以使用网络管理器。
对于ppp连接(例如拨号和具有某些提供商的DSL),将运行/etc/ppp/ip-up.d
下的脚本。它们记录在pppd
手册页中。
而且看看在/ sys/class文件/网/
为eth0子目录/ SYS /班/网/的eth0/ 文件:
载体,休眠,operstate
变化取决于链路条件:
如果向上+电缆:载体= 1,休眠= 0,operstate =向上
如果向上+ NO电缆:载体= 0,休眠= 0,operstate =向下
如果向下+电缆:猫载体=无效的参数,猫休眠=无效的参数,operstate =向下
任何特定的操作系统? – 2010-03-07 01:31:41
我正在使用Ubuntu。 – 2010-03-07 02:02:28