Řešení 1:
-
Ne – přejdou na STDOUT (pokud používáte
echo
) nebo STDERR (pokud používáteecho >&2
). -
Vaše skripty se musí samy zapisovat do protokolů a/nebo syslog (vaše distribuce může obsahovat nějaký init.d funkce, které by tam mohly pomoci – přidejte svou distribuci ke své otázce).
Pokud se podíváte na protokoly, vyhledejte tee
příkaz. Pokud jdete na syslog, podívejte se na logger
. Můžete je libovolně kombinovat.
Řešení 2:
Napište obalový skript, který zavolá váš skript a přesměruje výstup do souboru
#!/bin/bash
/path/to/your/script &>/path/to/logfile
Řešení 3:
Můžete vytvořit funkci, která zprávu odešle na obrazovku i do syslogu, něco takového:
LOGGER="/usr/bin/logger -t $myScript" # check the location of logger for your system
myEcho () {
echo "$1"
$LOGGER "$1"
}
Můžete to také vložit do samostatného souboru a zahrnout to do svých skriptů pomocí
#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho
Řešení 4:
Zprávy z init skriptů nejsou obecně nikde zachyceny. Proto musíte implementovat způsob, jak to udělat sami. Dobrý nápad je použít logger
odeslat veškerý výstup do syslog. Tento příklad odešle stdout a stderr do syslog:
exec 1> >(logger -s -t $(basename $0)) 2>&1
Našel jsem to v tomto skvělém článku:http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/.