Я рекомендую использовать /usr/local
для коммерческих программ Вы могли бы установить, такие как Mathematica. Поместите его в его собственный раздел, когда Вы настроите. При обновлении ОС этот раздел не будет нарушен, и Вы не должны будете переустанавливать его содержание. Так используйте его для материала, который Вы хотите сохранить между обновлениями операционной системы.
Отдельно, удостоверьтесь, что Вы даете /home
его собственный раздел поэтому также.
Лучший тест, чтобы видеть, принимает ли сервер соединения, должен на самом деле попытаться соединиться. Используйте постоянный клиент для любого протокола, который говорит Ваш сервер, и не попробуйте никакую-op команду.
Если Вы хотите легкий TCP или клиент UDP, можно управлять просто от оболочки, использовать netcat. То, как программировать разговор, зависит от протокола; много протоколов имеют сервер близко соединение на определенном входе, и netcat затем выйдет.
while ! echo exit | nc localhost 13000; do sleep 10; done
Можно также сказать netcat выходить после установления соединения. Это возвращается 1, если нет никакого соединения и 0, если существует так, мы инвертируем его вывод. В зависимости от Вашей версии netcat это может поддерживать один или обе из следующих команд:
while ! nc -z localhost 13000 </dev/null; do sleep 10; done
while ! nc -q 1 localhost 13000 </dev/null; do sleep 10; done
Альтернативный подход должен ожидать серверного процесса для открытия сокета слушания.
while netstat -lnt | awk '$4 ~ /:13000$/ {exit 1}'; do sleep 10; done
Если бы Вы находитесь на Mac OS, netstat использует немного отличающийся выходной формат, таким образом, Вы хотели бы следующее вместо этого:
while netstat -lnt | awk '$4 ~ /\.13000$/ {exit 1}'; do sleep 10; done
Или Вы могли бы хотеть быть нацеленными на определенный идентификатор процесса:
while ! lsof -n -Fn -p $pid | grep -q '^n.*:13000$'; do sleep 10; done
Я не могу думать ни о каком способе реагировать на процесс, начинающий слушать сокет (который избежал бы подхода опроса) за исключением использования ptrace
.
Если у вас есть баш и кореутилы (например. таймаут, сон), но не nc/lsof/netstat, Вы можете использовать это решение, использующее bash magic tcp сокеты:
while ! timeout 1 bash -c "echo > /dev/tcp/localhost/13000"; do sleep 10; done
Следуя предыдущему примеру с bash
магией tcp сокетов, вот улучшенная версия, которая ожидает соединения в течение ограниченного количества времени.
timeout 15 bash -c 'until echo > /dev/tcp/localhost/13000; do sleep 0.5; done'
Разница в том, что если соединение не было доступно в течение 15с
, - он не будет циклиться вечно, а выйдет с кодом ошибки.
Это полезно в скриптах init для ожидания готовности/доступности сервиса после запуска.
Я написал утилиту для ожидания открытия порта, она также может проверять доступность MySQL, PostgreSQL, Redis и т.д.
# Checking TCP port
wait4x tcp localhost:8080
# Checking TCP port with specific timeout (5 Minutes)
wait4x tcp localhost:8080 -t 5m
Это открытый исходный код, доступный по адресуhttps://github.com/atkrad/wait4x.Надеюсь, другим это будет полезно!
nc -w 2 </dev/null >/dev/null
— если соединение занимает больше чем 2 секунды, оно испытывает таймаут и сбои — который удобен для моего использования. – ephemient 10.01.2011, 01:10nc -q 1 localhost 13000 </dev/null
возвраты сразу, если никакой сервер не слушает, но это возвращается с кодом ошибки, таким образом, цикл заставляет его спать и попробовать еще раз несколько секунд спустя. – Gilles 'SO- stop being evil' 19.03.2015, 19:16