NetworkManager - if-down.d 脚本不执行

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 不再存在之间是否有区别。

Mat*_*rre 5

尝试将您的“断开连接”脚本移动到/etc/network/if-post-down.d,这是在 NetworkManager 断开连接时实际运行的目录,而不是if-down.d(这意味着触发设备下降,而不是在它刚刚断开连接时)。对于您想要实现的目标,这应该不是问题,事实上,避免在默认网关可能尚未更新时尝试通过网络发送 SMS。

这显然假设您仍然有另一个连接(有线)来发送 SMS。其他任何东西都太不确定和不可靠,不值得使用(在运行脚本以通过它发送 SMS 时,您不能期望无线连接足够工作)。

如果您想对此进行进一步调查,可以查看/etc/NetworkManager/dispatcher.d/01ifupdown