Pengalihan
StandardOutput=file:/var/log/flume-ng/log1.log
StandardError=file:/var/log/flume-ng/log2.log
seperti yang didokumentasikan di sini:https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=
Perhatikan bahwa dengan cara ini seluruh konten file log akan ditimpa setiap kali layanan dimulai ulang.
Lampirkan
Jika Anda ingin mempertahankan log file di antara restart layanan dan cukup tambahkan baris log baru ke dalamnya:
# Works only in systemd v240 and newer!
StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log
Jika systemd lebih lama dari v240, Anda dapat menggunakan:
ExecStart=/bin/sh -c 'exec /usr/bin/my_binary [arguments] >>/var/log/flume-ng/log1.log 2>>/var/log/flume-ng/log2.log'
exec
berarti program shell akan diganti dengan my_binary
program setelah mengatur pengalihan tanpa forking. Jadi tidak akan ada perbedaan dari menjalankan my_binary
langsung setelah ExecStart=
.
ExecStart=/usr/bin/nohup …
Ini salah. Singkirkan. Layanan ini tidak berjalan dalam sesi login interaktif. Tidak ada terminal pengontrol, atau pemimpin sesi, untuk mengirim sinyal hangup ke sana.
ExecStart=… &
Ini salah. Singkirkan. Ini bukan skrip shell. &
tidak memiliki arti seperti cangkang khusus, dan dalam hal apa pun akan menjadi cara yang salah untuk memulai layanan.
StandardOutput=/var/log/flume-ng/log1.log StandardError=/var/log/flume-ng/log2.log
Ini salah. Jangan gunakan ini. systemd sudah mengirim output standar dan kesalahan proses layanan ke jurnalnya, tanpa pengaturan seperti itu di unit layanan. Anda dapat melihatnya dengan
journalctl -e -u flume-ng.service
Untuk masuk ke file tanpa menimpa (system.d versi 240+ diperlukan):
StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log
atau
StandardOutput=append:/var/log/flume-ng/log.log
StandardError=inherit