我可以配置 dhclient 在 DHCP 成功续订后执行 bash 脚本吗?

我可以配置 dhclient 在 DHCP 成功续订后执行 bash 脚本吗?

我对 Ubuntu 还不熟悉,刚刚安装了 Ubuntu-server 14.04.3 LTS。我已经注册了动态 DNS,并选择使用 bash 脚本,通过简单的 wget 命令在动态 DNS 网站公开的 REST API 上更新我的 IP 地址。我计划在 dhclient (DHCP) 续订后执行 bash 脚本,但我不知道如何配置 dhclient 来执行这样的操作。

谢谢,

答案1

我找到了解决问题的方法。 man dhclient指出脚本在dhclient获得租约时被调用。进一步阅读和实际脚本本身描述了根据 dhcp 过程的阶段执行的man dhclient-script脚本的位置。dhclient

钩子位于和/etc/dhcp/dhclient-enter-hooks.d目录中/etc/dhcp/dhclient-exit-hooks.d,用于执行前后操作dhclient。由于我对成功续订后执行脚本感兴趣,因此我将脚本放在目录中...-enter-hooks.d

这是脚本,在执行动态 DNS 脚本之前检查表示新的 dhcp ip 地址的特定阶段:

case "$reason" in

    BOUND|RENEW|REBIND|REBOOT)
        sh /etc/network/rinker.sh
        ;;

esac

rinker.shhttp://www.changeip.com/accounts/downloads.php?action=displaycat&catid=4,这只是对网站更新 URL 进行简单的 wget 调用。

答案2

我想跟进 Poly Bug 的回答。

我发现,在调用外部脚本时,如果在调用脚本之前使用“sh”和“source”,dhclient 会将其视为“其钩子的一部分”。因此,它会给出如下错误:
[[: not found 如果在调用的脚本中包含 if / then 语句,则您打算运行的钩子脚本将失败。

相反,删除 sh 并运行 dhclient-exit-hook 脚本,如下所示:

#!/bin/bash
# dhclient is picky about how it runs sub-scripts.
# using this way allows divorces it from the hook itself so it runs independently of the hook
/SM/data-drive/sm_scripts/network/dhclient-resolv-set $0 $BASH_SOURCE $reason &

这将以异步方式运行您调用的脚本而不会出现错误。

我还根据这篇文章制作了后续视频:

相关内容