
Я хочу послать себе рычание после того, как сервер SuSE завершит процесс загрузки. Я получил это сообщение socket_sendto(): unable to write to socket [101]: Network is unreachable in
.
Как можно проверить из командной строки, доступна ли сеть, и подождать, если это не так?
решение1
ping
к внешнему хосту может произойти сбой по множеству причин, и лишь немногие из них действительно сообщают что-либо полезное о состоянии вашей собственной сети.
В качестве первого шага откройте окно терминала и введите
ip route ls
Вы должны увидеть вывод примерно такого содержания:
shadur@equinox:~$ ip route ls
192.168.15.0/24 dev eth0 proto kernel scope link src 192.168.15.102
default via 192.168.15.1 dev eth0
Это означает, что ваша локальная сеть представляет собой Ethernet-подключение ( eth0
) с адресом 192.168.15.0
, а ее шлюз по умолчанию, через который она получает доступ к остальной части Интернета, можно найти по адресу 192.168.15.1
.
Далее вы можете попробовать перейти по ping
этому адресу:
shadur@equinox:~$ ping 192.168.15.1
PING 192.168.15.1 (192.168.15.1) 56(84) bytes of data.
64 bytes from 192.168.15.1: icmp_req=1 ttl=255 time=0.352 ms
64 bytes from 192.168.15.1: icmp_req=2 ttl=255 time=0.269 ms
^C
--- 192.168.15.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.269/0.310/0.352/0.045 ms
Если вы видите что-то похожее на вышесказанное, ваша локальная сеть, по крайней мере, в порядке. На этом этапе вы можете начать искать с помощью более продвинутых инструментов, например, traceroute
чтобы увидеть, где ваше соединение с пунктом назначения может давать сбой.
Однако после быстрой проверки в Google того, что growl
на самом деле должно быть, у меня возникло ощущение, что что-то еще идет не так. Можете ли вы расширить свой вопрос, чтобы дать нам немного больше подробностей о том, что вы пытаетесь сделать, как вы это делаете, и полный вывод ошибки? Строка, которую вы нам сейчас даете, резко обрывается...
решение2
Очень простой и быстрый способ — использовать ping
команду.
Вы можете просто ввести
$ ping yahoo.com
(или cnn.com или любой другой хост) и посмотрите, получите ли вы какой-либо вывод. Это предполагает, что имена хостов могут быть разрешены (т.е. DNS работает). Если нет, вы можете, надеюсь, предоставить действительный IP-адрес/номер удаленной системы и посмотреть, можно ли к ней добраться.
Обновлять:
В качестве быстрого примера вы можете проверитьвозвращаемое значение(например, с "echo $?"
) из , ping
чтобы увидеть, была ли команда выполнена успешно (вы всегда можете передать вывод команды в > /dev/nul
). Обратите внимание, что я использую -c 1
здесь , но вы можете использовать больше.
$ ping -c 1 yahoo.com
PING yahoo.com (72.30.38.140) 56(84) bytes of data.
64 bytes from ir1.fp.vip.sp2.yahoo.com (72.30.38.140): icmp_seq=1 ttl=52 time=83.5 ms
--- yahoo.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 83.593/83.593/83.593/0.000 ms
echo $?
0
$ ping -c 1 unicorns.are.here
ping: unknown host unicorns.are.here
$ echo $?
2
решение3
Я бы воспользовался netcat
желаемой услугой.
Например, тестирование порта IP, успешное
> nc -zv 192.168.1.1 80
Connection to 172.26.0.1 80 port [tcp/http] succeeded!
...и неудача
> nc -zv 192.168.1.1 22
netcat: connect to 172.26.0.1 port 22 (tcp) failed: Connection refused
с тайм-аутом 10 с
> nc -zv -w 10 10.0.0.1 80
netcat: connect to 10.0.0.1 port 80 (tcp) timed out: Operation now in progress
решение4
Я использую следующую функцию... По умолчанию это quad9, но вы можете указать другой домен. Он будет заблокирован после 15 минут попыток
wait_for_dns() {
local fqhn="quad9.net"
fqhn=${1:-$fqhn}
printf "waiting"
for i in {1..15}; do
local a_record=$(dig +short +time=2 $fqhn)
if [[ $a_record != '' ]]; then
printf "\n"
return 0
fi
printf '.'
sleep 60
done
printf "\n"
return 1
}