Bisakah saya mengarahkan output ke file log dan latar belakang proses pada saat yang sama?
Dengan kata lain, dapatkah saya melakukan hal seperti ini?
nohup java -jar myProgram.jar 2>&1 > output.log &
Atau, bukankah itu perintah hukum? Atau, apakah saya perlu memindahkannya secara manual ke latar belakang, seperti:
java -jar myProgram.jar 2>$1 > output.log
jobs
[CTRL-Z]
bg 1
bash
shell
shell-script
Djangofan
sumber
sumber
2>$1
mungkin seharusnya2>&1
.Jawaban:
Satu masalah dengan perintah pertama Anda adalah Anda mengarahkan stderr ke tempat stdout adalah (jika Anda mengubah $ ke a & seperti yang disarankan dalam komentar) dan kemudian, Anda mengarahkan stdout ke beberapa file log, tetapi itu tidak menarik sepanjang stderr yang diarahkan . Anda harus melakukannya dengan urutan lain, pertama kirim stdout ke tempat yang Anda inginkan, dan kemudian kirim stderr ke alamat stdout di
dan kemudian Anda bisa melempar & ke untuk mengirimnya ke latar belakang. Pekerjaan dapat diakses dengan
jobs
perintah.jobs
akan menunjukkan kepada Anda pekerjaan yang sedang berjalan, dan beri nomor. Anda kemudian dapat berbicara tentang pekerjaan menggunakan% diikuti dengan angka sepertikill %1
atau lebih.Juga, tanpa & di akhir Anda dapat menangguhkan perintah dengan Ctrlz, gunakan
bg
perintah untuk meletakkannya di latar belakang danfg
membawanya kembali ke latar depan. Dalam kombinasi denganjobs
perintah, ini sangat kuat.untuk memperjelas bagian di atas tentang urutan Anda menulis perintah. Misalkan stderr adalah alamat 1002, stdout adalah alamat 1001, dan file tersebut 1008. Perintah membaca dari kiri ke kanan, jadi hal pertama yang dilihatnya adalah milik Anda
2>&1
yang memindahkan stderr ke alamat 1001, ia kemudian melihat> file
yang bergerak stdout ke 1008, tetapi tetap stderr di 1001. Itu tidak menarik semuanya menunjuk ke 1001 dan memindahkannya ke 1008, tetapi hanya referensi stdout dan memindahkannya ke file.Sebaliknya, ia bergerak stdout ke 1008, dan kemudian bergerak stderr ke titik yang mengarah ke stdout, 1008 juga. Dengan cara ini keduanya dapat mengarah ke satu file.
sumber
$!
&> file.out
untuk mengarahkan kembali stdin dan stdout ke file output, yang mengurangi kemungkinan kesalahan dengan meletakkan2>&1
tempat yang salah di baris perintah Anda.Berhenti dengan
<Ctrl+Z>
dan melanjutkan di latar belakangbg
sama dengan mengeksekusi dengan&
di akhir perintah.Jadi, untuk dijalankan di latar belakang dan redirect output:
Jika Anda juga membutuhkan agar perintah ini tidak mati ketika Anda meninggalkan terminal, maka Anda harus menggunakannya
nohup
sumber
&
bg
, Anda dapat melepaskannya dari sesi dengan menjalankandisown
, yang membuat proses tersebut tidak mati ketika Anda menutup terminal.Perhatikan bahwa
&>
mengarahkan stdout dan stderr ke output.logsumber
Alih-alih menggunakan nohup Anda dapat menggunakan layar. Anda dapat melihat status program secara real time. Anda bahkan dapat mencatat semua output ke file. Ini berguna ketika Anda mengakses server melalui ssh tempat Anda keluar karena koneksi yang buruk atau tidak aktif. Setelah masuk, Anda dapat melanjutkan pekerjaan dari tempat Anda pergi. lihat ini dan ini untuk mengetahui secara detail.
sumber
The
tee
perintah cukup lazim juga.nohup java -jar myProgram.jar | tee output.log &
sumber