Soluzione 1:
-
No, vanno a STDOUT (se usi
echo
) o STDERR (se usiecho >&2
). -
I tuoi script devono scrivere nei log e/o nel syslog da soli (la tua distribuzione potrebbe contenere alcuni init.d funzioni che potrebbero aiutarti - aggiungi la tua distribuzione alla tua domanda).
Se cerchi i log cerca il tee
comando. Se scegli syslog guarda logger
. Puoi combinarli come preferisci.
Soluzione 2:
Scrivi uno script wrapper che chiami il tuo script e reindirizzi l'output a un file
#!/bin/bash
/path/to/your/script &>/path/to/logfile
Soluzione 3:
Potresti creare una funzione per far risuonare il messaggio sia sullo schermo che su syslog, qualcosa del genere:
LOGGER="/usr/bin/logger -t $myScript" # check the location of logger for your system
myEcho () {
echo "$1"
$LOGGER "$1"
}
Puoi anche metterlo in un file separato e includerlo nei tuoi script con
#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho
Soluzione 4:
I messaggi dagli script init generalmente non vengono catturati da nessuna parte. Pertanto, è necessario implementare un modo per farlo da soli. Una buona idea è usare logger
per inviare tutto l'output a syslog. Questo esempio invierà stdout e stderr a syslog:
exec 1> >(logger -s -t $(basename $0)) 2>&1
L'ho trovato in questo fantastico articolo:http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/.