Solusi 1:
-
Tidak - mereka membuka STDOUT (jika Anda menggunakan
echo
) atau STDERR (jika Anda menggunakanecho >&2
). -
Skrip Anda harus menulis ke log dan/atau syslog sendiri (distribusi Anda mungkin berisi beberapa init.d fungsi yang mungkin membantu di sana - tambahkan distribusi Anda ke pertanyaan Anda).
Jika Anda mencari log, cari tee
memerintah. Jika Anda menggunakan syslog, lihat logger
. Anda dapat menggabungkannya dengan cara apa pun yang Anda inginkan.
Solusi 2:
Tulis skrip pembungkus yang memanggil skrip Anda dan mengalihkan hasilnya ke file
#!/bin/bash
/path/to/your/script &>/path/to/logfile
Solusi 3:
Anda dapat membuat fungsi untuk menggemakan pesan ke layar dan ke syslog, kira-kira seperti ini:
LOGGER="/usr/bin/logger -t $myScript" # check the location of logger for your system
myEcho () {
echo "$1"
$LOGGER "$1"
}
Anda juga dapat memasukkannya ke dalam file terpisah dan memasukkannya ke dalam skrip Anda dengan
#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho
Solusi 4:
Pesan dari skrip init umumnya tidak ditangkap di mana pun. Jadi, Anda perlu menerapkan cara untuk melakukannya sendiri. Sebaiknya gunakan logger
untuk mengirim semua output ke syslog. Contoh ini akan mengirimkan stdout dan stderr ke syslog:
exec 1> >(logger -s -t $(basename $0)) 2>&1
Saya menemukannya di artikel bagus ini:http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/.