nohup: mengabaikan input dan mengarahkan stderr ke stdout

19

Saya memulai aplikasi saya di latar belakang menggunakan nohupseperti yang disebutkan di bawah ini -

root@phx5qa01c:/bezook# nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out &
[1] 30781
root@phx5qa01c:/bezook# nohup: ignoring input and redirecting stderr to stdout

Tetapi setiap kali saya melihat pesan ini -

nohup: ignoring input and redirecting stderr to stdout

Apakah akan ada masalah jika saya melihat pesan ini? Apa artinya dan bagaimana saya bisa menghindarinya?

gudang senjata
sumber
2
Anda sudah mencoba:nohup java -jar blaa bla >/tmp/test.out 2>&1 &
Rahul Patil
alih-alih menggunakan /tmp/test.outbisa saya gunakan exhibitor.out. Maaf telah mengajukan pertanyaan bodoh karena saya cukup baru dalam hal-hal ini ..
arsenal
ya .. Anda bisa menggunakan .. itu hanya std error / file output. tetapi apa status setelah menambahkan 2>&1?
Rahul Patil

Jawaban:

20

Untuk memastikan bahwa aplikasi Anda terlepas dari terminalnya - sehingga tidak akan mengganggu perintah latar depan dan akan terus berjalan setelah Anda logout - nohupmemastikan bahwa stdin atau stdout atau stderr adalah perangkat seperti terminal. The dokumentasi menjelaskan tindakan apa yang diperlukan:

Jika output standar adalah terminal, semua output yang ditulis oleh utilitas bernama untuk output standarnya akan ditambahkan ke akhir file nohup.out di direktori saat ini. Jika nohup.out tidak dapat dibuat atau dibuka untuk ditambahkan, hasilnya akan ditambahkan ke akhir file nohup.out di direktori yang ditentukan oleh variabel lingkungan HOME. Jika tidak ada file yang dapat dibuat atau dibuka untuk ditambahkan, utilitas tidak akan dipanggil.

Jika kesalahan standar adalah terminal, semua keluaran yang ditulis oleh utilitas bernama untuk kesalahan standarnya akan dialihkan ke deskriptor file yang sama dengan keluaran standar.

Anda mengarahkan stdout ke file saat Anda mengetikkan > exhibitor.outbaris perintah. Jika Anda setuju dengan stderr aplikasi Anda diarahkan ke file yang sama dengan stdout, Anda tidak perlu melakukan hal lain. Atau Anda dapat mengarahkan stderr ke file lain dengan menambahkan argumen seperti 2> exhibitor.err. (Berkat pengguna yang tidak dikenal - notifikasi saya tidak menunjukkan nama - untuk menyarankan dimasukkannya alternatif ini.)

Tandai Plotnick
sumber
2
Ini juga berguna untuk menutup input fd secara manual seperti: </dev/null; Linux akan melakukan ini secara otomatis, tetapi jika tidak dilakukan secara manual Anda masih akan mendapatkan garis dalam output nohup yang berbunyi:nohup: ignoring input
wulfgarpro
17

Anda dapat menyingkirkan pesan jika Anda mengarahkan kembali std error ke std output:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1 &
shargors
sumber
4

Dalam situasi saya, saya mengarahkan stdout dan stderr, tetapi juga menampilkan berikut ini di file log:

nohup: ignoring input

Untuk menghapus peringatan itu, Anda juga harus mengarahkan ulang stdin sebagai berikut:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1  </dev/null &

Saya tahu jawaban ini sudah pasti terlambat untuk Anda, tetapi mungkin itu akan membantu orang lain.

styshoo
sumber