nohup redirecionamento de saída para um arquivo diferente

4

Eu uso nohup com bastante frequência para processos importantes de execução longa em linux / bash , tanto que nohup time my command with arguments && mv nohup.out my.log é quase um idioma para mim.

O problema é que nohup coloca stdout e stderr em nohup.out e não consigo controlar o nome do arquivo. Isso significa que se eu acidentalmente iniciar dois nohup s no mesmo diretório, sua saída será intercalada em nohup.out .

As perguntas são:

  1. Como faço para lidar com esse problema? Sempre executando nohup s em diretórios separados e escrevendo uma função de shell que primeiro verificará ./nohup.out são duas opções ruins que eu vejo.

  2. Por que não posso dizer nohup.out para onde redirecionar a saída? As ferramentas GNU tendem a ter muitas opções , por que não nohup ?

por sds 14.02.2013 / 16:38

3 respostas

6

Você pode redirecionar stdout e stderr para um arquivo. Com Bash 4 (ou outros como Zsh), tão fácil quanto:

nohup <some-command> &> output.log

Eu não posso dizer por que não há uma opção separada para nohup definir a saída, mas se o seu shell puder cuidar disso, você realmente não precisa de uma opção.

    
por 14.02.2013 / 16:44
4

Para Anexar saída no arquivo definido pelo usuário , você pode usar >> no comando nohup.

nohup php your_command >> filename.out 2>&1 &

Este comando anexará todas as saídas do seu arquivo sem remover os dados antigos.

    
por 18.08.2017 / 17:10
3

Existem mais maneiras do que apenas nohup para iniciar um processo para que ele ignore o SIGHUP; por exemplo: (escrito como funções de shell)

nohup() {
    setsid "$@"
}

nohup() {
    ("$@" &)
}

nohup() {
    "$@" & disown
}

( setsid , ou mesmo (setsid "$@" &) , pode ser a melhor escolha.)

Todos eles permitem que você especifique seus próprios redirecionamentos com > , 2> e &> / >& .

    
por 14.02.2013 / 16:48

Tags