So come reindirizzare l'output e come sopprimerli in bash. Ora, supponiamo che io abbia accidentalmente dimenticato di aggiungere la parte di reindirizzamento dell'output al comando (ad es. 2>&1
o > /tmp/mystdout
) e il mio processo in background è già in esecuzione da un po', posso ancora passare a dove stdout
e stderr
vengono scritti? Vorrei davvero non uccidere e riavviare l'applicazione.
Per essere più precisi come chiesto da Gilles nel suo commento, vorrei giocherellare con esso in questi scenari nello specifico:
- File di output errato
- dimenticato di reindirizzare
stderr
astdout
o una combinazione di entrambi
Per esempio. Ho Apache in esecuzione e posso vedere i descrittori di file:
/proc/8019/fd/0 -> /dev/null
/proc/8019/fd/1 -> /dev/null
/proc/8019/fd/2 -> /var/log/apache2/error.log
Risposta accettata:
Puoi farlo usando il reindirizzamento (https://github.com/jerome-pouiller/reredirect/).
reredirect -m /dev/null <PID>
Puoi ripristinare l'output iniziale del tuo processo in un secondo momento usando qualcosa come:
reredirect -N -O <M> -E <N> <PID>
(<M>
e <N>
sono forniti dal precedente lancio del reindirizzamento).
reindirizzare README
spiega anche come reindirizzare a un altro comando o reindirizzare solo stdout o stderr.