cron bash 脚本中的 ifdown 运行失败

cron bash 脚本中的 ifdown 运行失败

我有一个脚本,当服务器(Ubuntu 14.04)启动时使用 crontab 中的 @reboot 运行(在 root 用户下)

@reboot /bin/bash /root/init.sh >> /var/logs/vminit.log

该脚本运行了许多操作,但当它到达这一行时

ifdown eth1

脚本退出,并且ifdown未运行。(运行时ifconfig输出中仍显示 eth1)启用详细模式ifdown也不会返回任何内容。

如果我自己手动运行该脚本,它会按预期运行。

我写了一个测试脚本来排除任何问题init.sh

#!/bin/bash
echo 'one'
ifdown eth1
echo 'two'

如果我手动运行它,我会得到这个输出(这是预期的)

one
<DHCP Client info>
two

如果我将此测试脚本放入要运行的 crontab 中@reboot,我会得到与 相同的结果init.sh,输出为

one

我已经通过在精确的时间运行 cron 进行测试(例如25 14 * * *:)以查看它是否与“@reboot”有关,但没有成功。

我还尝试过在启动后延迟脚本的运行,以防有什么东西阻止 ifdown 运行

@reboot /bin/sleep 60; /bin/bash /root/init.sh >> /var/log/vminit.log

几点注意事项: - Eth1 是一个活动接口,在运行 ifdown 之前,脚本会调用 eth1 成功抓取文件。 - 该脚本以 root 身份运行 - 脚本(和日志)的权限很好。 - 运行init.sh或测试脚本按预期手动运行。

答案1

我真的不知道为什么ifdown不适用于 crontab。

无论如何,我很久以前就遇到过同样的情况并且有一个解决方法,希望这对你有所帮助。

代替

ifdown eth1

/sbin/ifconfig eth1 down 1> /dev/null

这对我有用。

答案2

当我在 cron 作业中使用ifup或时,这对我有用:ifdown

  1. 首先,确保已ifupdown安装:
    apt-get install ifupdown
    
  2. 查找ifdown位置:
    which ifdown
    
  3. 参考ifdown绝对路径:
    #!/bin/bash
    echo 'one'
    /sbin/ifdown eth1
    echo 'two'
    

答案3

即使你使用 wpa_cli 作为 cron 作业,你也需要提供完整路径,如下所示:

/sbin/wpa_cli -i eth1 reconfigure

相关内容