Linux:NetworkManager的/etc/NetworkManager/dispatcher.d/测试脚本不起作用。代码包括在内

时间:2013-05-31 00:28:13

标签: linux centos startup rc

根据信息,

中的任何文件
/etc/NetworkManager/dispatcher.d/

假设从

接收2个可能的命令
NetworkManager

我们可以简单地找出这些命令 查看已经在

中的一个脚本的来源
/etc/NetworkManager/dispatcher.d/

所以我们这样做。

cd     /etc/NetworkManager/dispatcher.d/
ls
00-netreport  05-netfs  10-dhclient
vi 00*
这里没什么。

gedit 05*

优异。

#!/bin/sh

export LC_ALL=C

if [ "$2" = "down" ]; then
    /sbin/ip route ls | grep -q ^default || {
        [ -f /var/lock/subsys/netfs ] && /etc/rc.d/init.d/netfs stop || :
    } && { :; }
fi

if [ "$2" = "up" ]; then
    /sbin/ip -o route show dev "$1" | grep -q '^default' && {
        /sbin/chkconfig netfs && /etc/rc.d/init.d/netfs start || :
    } || { :; }
fi

让我们复制它并创建一个名为

的文件
 test

让我们只使用我们需要的“up”。

file: test


#!/bin/sh

export LC_ALL=C

if [ "$2" = "up" ]; then
    /sbin/ip -o route show dev "$1" | grep -q '^default' && {
        /sbin/chkconfig netfs && /etc/rc.d/init.d/netfs start || :
    } || { :; }
fi

让我们修改它,以便它可以“直观地”执行我们可以用它来测试的东西。

#!/bin/sh

export LC_ALL=C

if [ "$2" = "up" ]; then
    gedit test.txt
fi

结果:

Not Working.

让我们以一种可以理解的方式对其进行修改。

#!/bin/sh

export LC_ALL=C

if [ "$2" = "up" ]; then
    /sbin/ip -o route show dev "$1" | grep -q '^default' && {
        gedit test.txt || :
    } || { :; }
fi

重启..

结果:

nothing

解决:

这是所选答案中可能的最小代码:
(我能够创造)

case "$2" in
    up)
touch /root/Desktop/ooo
    ;;
esac

我需要让它变小,因为我经常重新格式化我的机器,然后运行一个脚本来自动设置这些东西。所以在未来我只会运行

cat >> /etc/NetworkManager/dispatcher.d/test << EOF
case "\$2" in
    up)
touch /root/Desktop/ooo
    ;;
esac
EOF
chmod +x /etc/NetworkManager/dispatcher.d/test

换句话说,$必须使用“cat>>”事件进行转义。

1 个答案:

答案 0 :(得分:3)

以下是NetworkManager连接时运行的脚本的工作示例:

#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs ifupdown scripts when NetworkManager fiddles with interfaces.
# See NetworkManager(8) for further documentation of the dispatcher events.

if [ -z "$1" ]; then
    echo "$0: called with no interface" 1>&2
    exit 1;
fi

# Run the right scripts
case "$2" in
    up|vpn-up)
    logger -s "HELLO THIS IS YOUR SCRIPT"
    cd /home && touch "HELLOFILE.txt"
    ;;
    down|vpn-down)
    ;;
    hostname|dhcp4-change|dhcp6-change)
    # Do nothing
    ;;
    *)
    echo "$0: called with unknown action \`$2'" 1>&2
    exit 1
    ;;
esac

将脚本命名为您喜欢的任何内容,使其可执行,并将其放入/etc/NetworkManager/dispatcher.d/目录。

您可以通过打开终端并运行来验证这是否有效:

sudo tail -f /var/log/syslog //打印系统日志直到取消

然后打开另一个终端,然后运行:

sudo service network-manager restart //重新启动NetworkManager

你应该会在日志中看到“你好这是你的脚本”这个词,还有很多其他信息。该文件应添加到/home目录。

我不确定为什么打开gedit的具体情况不起作用,但这是在网络管理器启动时运行脚本的方法。我的猜测是,问题的其余部分与脚本以root身份运行但您希望gedit在特定用户(您)的桌面环境中打开这一事实有关。祝你好运!