Мне нужно запустить эту команду в Mac OS X El Capitan. Я нашел это в этом руководстве о Eclipse Che. Однако, когда я пытаюсь это сделать, socat продолжает ждать ввода от stdin.

$ socat -d TCP-LISTEN:2376,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock
I'm writing here, and I don't know why socat let me do this

^C$

Мне нужно нажать Ctrl + C, чтобы вернуться к подсказке. Что я делаю неправильно?

1 ответ1

1

Автор, вероятно, никогда не пробовал это. Руководство говорит , что это о fork опции:

После установления соединения обрабатывает свой канал в дочернем процессе и удерживает родительский процесс, пытающийся создать больше соединений, путем прослушивания или соединения в цикле (пример).

Это означает, что socat не будет разветвляться до запуска основного цикла прослушивания.

Опция -d только увеличивает многословность (как в debug).

tl; dr: socat не может этого сделать.

Исходное дерево содержит этот вспомогательный скрипт для запуска socat в фоновом режиме. Вы можете адаптировать его к своим целям. Я не писал этот сценарий!

#! /bin/sh
# source: daemon.sh
# Copyright Gerhard Rieger 2001
# Published under the GNU General Public License V.2, see file COPYING

# This script assumes that you create group daemon1 and user daemon1 before.
# they need only the right to exist (no login etc.)

# Note: this pid file mechanism is not robust!

# You will adapt these variables
USER=daemon1
GROUP=daemon1
INIF=fwnonsec.domain.org
OUTIF=fwsec.domain.org
TARGET=w3.intra.domain.org
INPORT=80
DSTPORT=80
#
INOPTS="fork,setgid=$GROUP,setuid=$USER"
OUTOPTS=
PIDFILE=/var/run/socat-$INPORT.pid
OPTS="-d -d -lm"    # notice to stderr, then to syslog
SOCAT=/usr/local/bin/socat

if [ "$1" = "start" -o -z "$1" ]; then

    $SOCAT $OPTS tcp-l:$INPORT,bind=$INIF,$INOPTS tcp:$TARGET:$DSTPORT,bind=$OUTIF,$OUTOPTS </dev/null &
    echo $! >$PIDFILE

elif [ "$1" = "stop" ]; then

    /bin/kill $(/bin/cat $PIDFILE)
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .