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

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

每当我的计算机进入或退出无线网络时,我都会尝试使用/etc/network/if-up.d//etc/network/if-down.d通过 Gmail 从我的计算机向我的手机发送短信。主脚本是用 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{[email protected]};
my $pass  = q{myPass};
my $sms   = q{[email protected]};

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 $@;

以下脚本是/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

这工作正常,每当我的手机进入网络时,我都会收到一条短信;if-down.d但是,发送“断开连接”信号的相应脚本却没有:

#!/bin/bash

set -e

if [ "$IFACE" == "wlan0" ]; then
    ~user/bin/laptopSMS.pl "disconnect" "disconnect" "disconnect"
fi

这没有执行;我尝试将以下代码片段放入脚本中,看看是否有任何内容正在运行:

ifdowntest=/home/user/ifdown_test.txt
date >> $ifdowntest
whoami >> $ifdowntest
ifconfig >> $ifdowntest
sleep 5

将其留在脚本中本身可以很好地执行,但将其附加到 Perl 脚本的包装器中则不行。(没有生成文件。)

输出ifconfig >> $ifdowntest显示 wlan0 没有 IP - 它已被关闭。我可以让这个脚本预先执行吗(我认为这是文件夹所做的if-down.d)或者以某种方式编辑某些内容以使其工作?请注意,手动运行 Perl 脚本时大约需要 3 秒钟才能触发。

FWIW:我通过单击 NetworkManager 小程序并单击“断开连接”来手动关闭网络。我也可以关闭我的路由器来测试这一点,但我不知道手动断开连接和 AP 不再存在之间是否有区别。

答案1

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

这显然假设您还有另一个连接(有线)来发送短信。其他任何方式都太不确定和不可靠,不值得使用(您不能指望在运行脚本以通过无线连接发送短信时,无线连接能够正常工作)。

如果你想进一步研究这个问题,你可以看看/etc/NetworkManager/dispatcher.d/01ifupdown

相关内容