Включение вывода процесса в файл tar

Опция 1: перенаправление портов NAT

Если все, что необходимо сделать здесь, является запросами перенаправления на внешнем порте 80 к внутренней работе программы порта 8880, можно использовать iptables перенаправление портов для этого:

# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to 127.0.0.1:8880

Существует несколько точек для понимания здесь:

  1. Я предполагаю, что Вы работаете на своего рода VPS, таким образом, eth0 вероятно, не правильное имя интерфейса. Необходимо будет заменить это раз так.

    Кстати, если Вы находитесь на общем хостинге, или Ваш VPS не позволяет iptables, пропустите к следующей опции.

  2. Как записано выше, правило предполагает конфигурирование этой внутренней программы для слушания только в интерфейсе localhost, 127.0.0.1. Это получает Вас "скрывающееся" поведение, которое Вы попросили.

  3. Ваши существующие ранее правила брандмауэра могут вмешаться в это правило, как оно в настоящее время пишется. Нет никакой замены того, чтобы на самом деле понять Ваш ток iptables правила прежде, чем изменить их, но если это не работает, можно вслепую попытаться добавить другое правило как это:

    # iptables -A FORWARD -p tcp -i eth0 --dport 80 -j ACCEPT
    

    Такая вещь была бы необходима если Ваше значение по умолчанию FORWARD правило цепочки DENY.

  4. Необходимо удостовериться, что эти правила подходят на начальной загрузке.

    Если Вы осторожны, можно отредактировать /etc/sysconfig/iptables на CentOS для выполнения этого. Этот файл использует синтаксис, подобный — но не точно как — iptables язык командной строки. Необходимо, вероятно, протестировать это на локальном VM для сокращения возможностей, что Вы случайно заблокируете себя из своего общедоступного сервера.

    Было бы более безопасно вставить команды /etc/rc.local, но остерегайтесь этого, если Вы перезапускаете iptables сервис (например, service iptables reload) Ваши пользовательские правила будут удалены, если они не будут в /etc/sysconfig/iptables.

Если Вы прочитали все это и задаетесь вопросом, почему я сделал это Опцией 1, когда Опция 2 ниже более проста, случается так, что это намного более эффективно. Перенаправление портов является в основном "бесплатным" с точки зрения ресурсов, после того как Вы настроили его.

Опция 2: прокси HTTP

Другой способ пойти состоит в том, чтобы использовать своего рода Прокси HTTP. Я использовал Tinyproxy для этого вида вещи. Это более гибко, чем перенаправление портов NAT и не требует, чтобы Вы унавозили с брандмауэром ОС.

Это упаковывается для CentOS в EPEL, так, чтобы, после того как Вы включили репозиторий EPEL, Вы просто сказали yum install tinyproxy.

Внесите эти изменения в запасе /etc/tinyproxy/tinyproxy.conf файл:

Port 80
Upstream localhost:8880

Кроме того, прокомментируйте Allow строка, таким образом, Tinyproxy примет соединения от внешнего дюйм/с:

# Allow 127.0.0.1

Необходимо удостовериться, что Apache не работает (service httpd stop) когда Вы пытаетесь запустить это (service tinyproxy start), так как это будет занимать порт 80.

Документация для Tinyproxy является просто краткой ссылкой, таким образом, я не уверен ли это использование Upstream взлом, лучше замененный при помощи обратных функций Tinyproxy прокси. Это работает на меня, тем не менее, и это вносит меньше изменений в конфигурационном файле, таким образом, это - то, как я делаю это.

Если Вы задаетесь вопросом, почему я только не использовал Apache для этого от запуска, это просто, что это более сложно и берет больше ресурсов. Apache действительно имеет функции проксирования. Если Вам не нужна полная мощность Apache, тем не менее, я не вижу оснований, чтобы пойти тем путем по Tinyproxy.

В отличие от перенаправления портов NAT, действительно требуются некоторые системные ресурсы для выполнения Tinyproxy. Требуется некоторая RAM, и если Ваш уровень трафика достаточно высок, это могло бы стать связанным вводом-выводом. Если Ваш сервер не будет особенно занят, тем не менее, то Вы, вероятно, даже не заметите, что он работает.

3
27.05.2015, 22:15
2 ответа

С помощью zsh :

$ echo $CMD
$CMD_AIX
$ echo ${(e)CMD}
(o=`host "myhost" `)
$ echo ${(e)${(e)CMD}}
(o=myhost has address 1.2.3.4)

Флаг расширения (e) должен оценивать расширения в значении расширяемой переменной.

С ksh93:

$ function CMD.get { eval ".sh.value=\"$_\""; }
$ function CMD_AIX.get { eval ".sh.value=\"$_\""; }
$ echo "$CMD_AIX"
(o=myhost has address 1.2.3.4)
$ echo "$CMD"
(o=myhost has address 1.2.3.4)
$ CMD=\$USER
$ echo "$CMD"
stephane

CMD.get является функцией дисциплины, которая вызывается в любое время $ CMD обычно используется для определения того, каким должно быть это расширение, чтобы разрешить переменные с динамическим содержимым. Здесь мы определяем его как возврат оценки его содержимого в двойных кавычках (что предполагает, что значение не содержит двойных кавычек).

Вы также можете использовать типы:

typeset -T evaluating_variable=(
  function get { eval ".sh.value=\"$_\""; }
)

OS=AIX host=myhost
evaluating_variable CMD_AIX='(o=`host "'$host'"`)'
evaluating_variable CMD=\$CMD_$OS

Теперь, почему вы хотите сделать это в сценарии оболочки - это другое дело.

-121--195767-

Я думал, что вы можете использовать файловую систему с предохранителем или что-то такое, но тогда я понял, что с этим в принципе есть проблема и что это невозможно сделать.

Выход tar необходимо передавать в потоковом режиме в удаленную систему с помощью завитков , что означает, что tar должен быть способен записывать свой выход полностью последовательно. Но формат tar файла требует, чтобы каждому члену архива предшествовал заголовок, который его описывает, и этот заголовок содержит, среди прочего, размер элемента. Но если содержимое файла члена само по себе поступает из канала, то tar будет невозможно заранее узнать, каким будет размер и, следовательно, невозможно записать заголовок и перейти к данным файла.

0
27.01.2020, 21:41

Не совсем уверен, что вы этого хотите. Читать из канала означает читать из стандартного ввода. Это делается с помощью tar xf - (или tar xzf - для сжатых потоков), где - обозначает стандартный ввод. Аналогично записи в стандартный вывод: tar cf - (или tar czf - ).

0
27.01.2020, 21:41

Теги

Похожие вопросы