我有一个脚本,当服务器(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
- 首先,确保已
ifupdown
安装:apt-get install ifupdown
- 查找
ifdown
位置:which ifdown
- 参考
ifdown
绝对路径:#!/bin/bash echo 'one' /sbin/ifdown eth1 echo 'two'
答案3
即使你使用 wpa_cli 作为 cron 作业,你也需要提供完整路径,如下所示:
/sbin/wpa_cli -i eth1 reconfigure