Ubuntu11.10DHClient未调用enter hook.d脚本

Ubuntu11.10DHClient未调用enter hook.d脚本,ubuntu,dhcp,Ubuntu,Dhcp,我有一个装有Ubuntu 11.10的盒子。该框被配置为从dhcp获取IP和主机名 我们已设置为/etc/dhcp/dhclient-enter-hooks.d/文件夹中的脚本。但是这些脚本没有被调用/执行。我在另一个盒子里有类似的脚本,里面安装了Ubuntu 10.04,钩子脚本执行时没有问题。一个区别是,在11.10框中安装了NetworkManager # ps -ef | grep dhclient root 746 695 0 03:52 ? 00:00

我有一个装有Ubuntu 11.10的盒子。该框被配置为从dhcp获取IP和主机名

我们已设置为/etc/dhcp/dhclient-enter-hooks.d/文件夹中的脚本。但是这些脚本没有被调用/执行。我在另一个盒子里有类似的脚本,里面安装了Ubuntu 10.04,钩子脚本执行时没有问题。一个区别是,在11.10框中安装了NetworkManager

# ps -ef | grep dhclient
root       746   695  0 03:52 ?        00:00:00 /sbin/dhclient -d -4 -sf /usr/lib/NetworkManager/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhcp/dhclient-559273da-a027-458e-b124-bdbb4976ee17-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0
我如何测试/etc/dhcp/dhclient enter hooks.d中的脚本没有运行? 我在/etc/dhcp/dhclient enter hooks.d中放置了一个简单的脚本“mytest”,其中包含以下代码。从未生成文件/tmp/enter-hook.out

#!/bin/sh
echo "this is test file to test dhclient-enter-hook" > /tmp/enter-hook.out
剪断我的/etc/网络/接口

# cat /etc/network/interfaces 
auto lo
iface lo inet loopback

auto eth0 inet dhcp

也许太晚了,你已经通过其他方式解决了问题;但无论如何,由于我也受到同样问题的影响,我想我应该插嘴

您的问题是NetworkManager。这就是执行dhclient的原因,使用不同的配置文件,而不执行任何挂钩。这是Ubuntu中的一个bug:

https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/293139
您可以将脚本放在/etc/NetworkManager/dispatcher.d中,以便在NetworkManager打开接口时执行。在上面的bug中,有一个导出到这些脚本的变量列表。如果您不需要它们中的任何一个,并且只想在interface start上执行某些操作,那么您应该对此有足够的了解


希望能有帮助。

也许太晚了,你已经通过其他方式解决了这个问题;但无论如何,由于我也受到同样问题的影响,我想我应该插嘴

您的问题是NetworkManager。这就是执行dhclient的原因,使用不同的配置文件,而不执行任何挂钩。这是Ubuntu中的一个bug:

https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/293139
您可以将脚本放在/etc/NetworkManager/dispatcher.d中,以便在NetworkManager打开接口时执行。在上面的bug中,有一个导出到这些脚本的变量列表。如果您不需要它们中的任何一个,并且只想在interface start上执行某些操作,那么您应该对此有足够的了解


希望有帮助。

几分钟前,我遇到了同样的问题,选择了dispatcher.d脚本路径。因此,我写了下面的脚本并将其放入 /etc/NetworkManager/dispatcher.d/99resolv.conf.dhclient

#!/bin/sh -e
# Script to dispatch NetworkManager events
# It overwrites /etc/resolv.conf with the DNS of preference
# See NetworkManager(8) for further documentation of the dispatcher events.

sleep 3
rm -f /etc/resolv.conf && echo nameserver 127.0.0.1 > /etc/resolv.conf
service dnsmasq reload
其思想是,无论发生什么情况,都将所有DNS请求发送到本地主机,dnsmasq在那里等待应答。现在需要做的就是告诉dnsmasq在哪里可以找到真正的resolv.conf文件,这样它就可以知道在哪里发送DNS请求,请求它不知道的主机名。在/etc/dnsmasq.d中创建一个文件,比如/etc/dnsmasq.d/upstream.conf,并将其放入此行

resolv-file=/var/run/NetworkManager/resolv.conf
/var/run/NetworkManager/resolv.conf
是网络管理器存储通过DHCP接收的DNS信息的地方。现在,每当您从DHCP服务器获得一些DNS信息时,您的dnsmasq服务器就会知道这些信息并相应地转发请求


而且,你完成了。您唯一担心的是dnsmasq是否会让您失败。

几分钟前,我遇到了同样的问题,并选择了dispatcher.d脚本路径。因此,我写了下面的脚本并将其放入 /etc/NetworkManager/dispatcher.d/99resolv.conf.dhclient

#!/bin/sh -e
# Script to dispatch NetworkManager events
# It overwrites /etc/resolv.conf with the DNS of preference
# See NetworkManager(8) for further documentation of the dispatcher events.

sleep 3
rm -f /etc/resolv.conf && echo nameserver 127.0.0.1 > /etc/resolv.conf
service dnsmasq reload
其思想是,无论发生什么情况,都将所有DNS请求发送到本地主机,dnsmasq在那里等待应答。现在需要做的就是告诉dnsmasq在哪里可以找到真正的resolv.conf文件,这样它就可以知道在哪里发送DNS请求,请求它不知道的主机名。在/etc/dnsmasq.d中创建一个文件,比如/etc/dnsmasq.d/upstream.conf,并将其放入此行

resolv-file=/var/run/NetworkManager/resolv.conf
/var/run/NetworkManager/resolv.conf
是网络管理器存储通过DHCP接收的DNS信息的地方。现在,每当您从DHCP服务器获得一些DNS信息时,您的dnsmasq服务器就会知道这些信息并相应地转发请求


而且,你完成了。您唯一担心的是dnsmasq是否会让您失败。

与编程无关。你的运气可能会更好。与编程无关。你的运气可能会更好。