Dan*_*hoa 3 network-manager 11.04
每当我的计算机进入或退出无线网络时,我都尝试使用/etc/network/if-up.d/
并/etc/network/if-down.d
通过 Gmail 从我的计算机向我的手机发送 SMS。主脚本是用 Perl 编写的,而所述文件夹中的脚本基本上是围绕它的包装器。这是 Perl 脚本~user/bin/laptopSMS.pl
:
#!/usr/bin/perl
use strict;
use warnings;
use Email::Send;
use Email::Send::Gmail;
use Email::Simple::Creator;
my $addy = q{myEmail@gmail.com};
my $pass = q{myPass};
my $sms = q{myPhoneNumber@tmomail.net};
my $email = Email::Simple->create(
header => [
From => $addy,
To => $sms,
Subject => "$ARGV[0]",
],
body => "$ARGV[1] / $ARGV[2]",
);
my $sender = Email::Send->new(
{ mailer => 'Gmail',
mailer_args => [
username => $addy,
password => $pass,
]
}
);
eval { $sender->send($email) };
die "Error sending email: $@" if $@;
Run Code Online (Sandbox Code Playgroud)
以下脚本是/etc/network/if-up.d/99postconnect_laptopSMS
:
#!/bin/bash
set -e
if [ "$IFACE" == "wlan0" ]; then
ipaddr=`ip addr | grep inet[^6] | grep -v 127.0.0.1 | awk {'print $2'} | sed 's!/[0-9]*!!g'`
ssid=`iwgetid -r`
~user/bin/laptopSMS.pl "connected" "$ssid" "$ipaddr"
fi
Run Code Online (Sandbox Code Playgroud)
这很好用,每当我的手机进入网络时,我都会收到一条短信;if-down.d
但是,发送“断开连接”信号的相应脚本不会:
#!/bin/bash
set -e
if [ "$IFACE" == "wlan0" ]; then
~user/bin/laptopSMS.pl "disconnect" "disconnect" "disconnect"
fi
Run Code Online (Sandbox Code Playgroud)
这不是执行;我尝试将以下代码段放入脚本中,以查看是否实际运行了任何内容:
ifdowntest=/home/user/ifdown_test.txt
date >> $ifdowntest
whoami >> $ifdowntest
ifconfig >> $ifdowntest
sleep 5
Run Code Online (Sandbox Code Playgroud)
将它单独留在脚本中可以很好地执行,但将其附加到 Perl 脚本的包装器中则不然。(不生成文件。)
的输出ifconfig >> $ifdowntest
表明 wlan0 没有 IP - 它已被删除。我可以让这个脚本执行 pre-down(我认为这就是if-down.d
文件夹所做的)或者以某种方式编辑一些东西来完成这项工作?请注意,手动运行 Perl 脚本时,它需要大约 3 秒才能触发。
FWIW:我通过单击 NetworkManager 小程序并单击“断开连接”来手动关闭网络。我也可以杀死我的路由器来测试它,但我不知道手动断开连接和 AP 不再存在之间是否有区别。
尝试将您的“断开连接”脚本移动到/etc/network/if-post-down.d,这是在 NetworkManager 断开连接时实际运行的目录,而不是if-down.d(这意味着触发设备下降,而不是在它刚刚断开连接时)。对于您想要实现的目标,这应该不是问题,事实上,避免在默认网关可能尚未更新时尝试通过网络发送 SMS。
这显然假设您仍然有另一个连接(有线)来发送 SMS。其他任何东西都太不确定和不可靠,不值得使用(在运行脚本以通过它发送 SMS 时,您不能期望无线连接足够工作)。
如果您想对此进行进一步调查,可以查看/etc/NetworkManager/dispatcher.d/01ifupdown。