перенаправьте временно STDOUT к другому дескриптору файла, но все еще экранировать

Ваш веб-сайт и серверы DNS - все на той же подсети (174.123.210.242 - 244). Это - единая точка отказа.

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

Вложите капитал в некоторый разнообразный хостинг DNS, так, чтобы Ваш DNS продолжил работать, даже если основной веб-хостинг понижается. Поиск Google "вторичного поставщика DNS" должен показать много.

2
задан 16 April 2012 в 12:20
3 ответа

stdout - это экран. Между stdout и «экраном» нет разделения.

В этом случае я бы просто временно перенаправил stdout на stderr с помощью 1> & 2 внутри подоболочки. Это приведет к тому, что выходные данные команд будут отображаться на экране, но их не будет в потоке stdout программ.

#!/bin/bash

# the output of these commands shouldn't go to STDOUT, but still appear on screen

# Start a subshell
(
    1>&2                # Redirect stdout to stderr
    some_cmd foo bar
    other_cmd baz
)
# At the end of the subshell, the file descriptors are 
# as they usually are (no redirection) as the subshell has exited.

#the following command creates a tar.gz of the "whatever" folder,
#and outputs the result to STDOUT
tar zc whatever/

Есть ли причина, по которой вам нужно перенаправить выходные данные этого сценария во что-то еще? Обычно вы просто записываете tar в файл с помощью флага -f или выполняете перенаправление только для команды tar: tar zc независимо от файла> filename.tar.gz (если вы не помещали его на такое устройство, как магнитная лента, или использовали его как форму копии).

5
ответ дан 3 December 2019 в 09:21

Разве не было бы намного проще, если бы вы использовали переключатель -f в команде tar, чтобы указать tar записывать в файл?

tar zcf whatever.tar.gz whatever/

Если это не так ' Если вы делаете то, что хотите, вам придется перенаправлять каждую команду, которая может записывать в STDOUT

some_cmd foo bar 1>&2
1
ответ дан 3 December 2019 в 09:21

Я думаю, вы ищете какой-то вид мультиплексирования.

Это простой пример того, как добавить метку времени к каждой строке std out: http://www.podciborski.co .uk / programming / perl / add-a-timestamp-to-every-stdout-line /

Вы можете использовать какой-нибудь специальный тег вместо временной метки для маркировки строк журнала. Тогда вам придется удалить эти строки на другом конце. Таким образом, использование будет таким:

ssh user@remoteserver the_script.sh | create_tar.sh filename

create_tar.sh должен быть скриптом, который печатает строки с тегом журнала и перенаправляет другие строки в файл.

0
ответ дан 3 December 2019 в 09:21

Теги

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