Вы также можете обслуживать следующий по величине доступный порт, выполняя что-то вроде этого в Python:
import SimpleHTTPServer
import SocketServer
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
port = 8000
while True:
try:
httpd = SocketServer.TCPServer(('', port), Handler)
print 'Serving on port', port
httpd.serve_forever()
except SocketServer.socket.error as exc:
if exc.args[0] != 48:
raise
print 'Port', port, 'already in use'
port += 1
else:
break
Если вам нужно сделать то же самое для других утилит, это может быть удобнее, чем скрипт bash:
#!/usr/bin/env bash
MIN_PORT=${1:-1025}
MAX_PORT=${2:-65535}
(netstat -atn | awk '{printf "%s\n%s\n", $4, $4}' | grep -oE '[0-9]*$'; seq "$MIN_PORT" "$MAX_PORT") | sort -R | head -n 1
Установите это как исполняемый файл с именем, get-free-port
и вы можете сделать что-то вроде этого:
someprogram --port=$(get-free-port)
Это не так надежно, как родной подход Python, потому что bash-скрипт не захватывает порт - другой процесс может захватить порт раньше, чем ваш процесс (условие гонки) - но все же может быть достаточно полезен при использовании утилиты, которая не ' у меня нет собственного подхода.
python -m SimpleHTTPServer 8081