我有一些嵌入式机器处于不可靠的连接状态,不幸的是网络管理器无法很好地处理。目前我需要检查连接情况,然后如果未连接则重新启动网络管理器,因为在大多数情况下,这可以处理我们看到它们失败的特定情况。我有以下脚本,当我手动运行时,它可以正常工作:
#!/bin/bash
host=http://google.com
timeout=60
if ! wget -S --spider --timeout=$timeout $host &>/dev/null; then
restart network-manager
fi
我目前有一个条目,/etc/cron.d/
其中有*/15 * * * * root /usr/bin/check_connectivity
。我可以通过阅读 cron 日志看到脚本正在运行,但是当我查看网络管理器日志时,我可以看到即使在没有活动连接的情况下进行测试,它也不会重新启动连接。手动运行脚本成功,并且 NM 重新启动。cron 的日志中没有错误消息,即使我删除了输出转储,我仍然没有得到任何结果。我不知道它为什么会失败。我可能认为它无法正确与 dbus 通信,但如果是这种情况,我会看到一些错误输出。
答案1
检查 root 的电子邮件。Cron 将所有输出通过邮件发送给 crontab 的所有者。我猜“restart”不在 cron 的路径中。出于这个和其他原因,我总是在脚本顶部附近包含一行“PATH=”。