cara memutar file nohup.out tanpa mematikan aplikasi saya

10

nohup.outFile saya berkembang cepat.

Saya menjalankan aplikasi di latar belakang, menulis nohup.outfile,

sekarang saya perlu memutar nohup.outfile tanpa mematikan aplikasi saya. Bisakah ini dilakukan?

pengguna2454307
sumber
Salin, lalu potong.
Jenny D
Dia mungkin kehilangan beberapa entri log berharga antara dua operasi yang Anda sarankan. Saya tidak akan merekomendasikan itu.
Cleankod

Jawaban:

6

Anda harus melihat belasan dalam kombinasi dengan logrotate. Jika Anda menyalurkan output aplikasi Anda melalui ini, maka Anda dapat SIGHUPmemproses belasan tanpa harus mematikan aplikasi Anda yang sedang berjalan.

flog (file logger) adalah program yang membaca input dari STDIN dan menulis ke file.

Jika SIGHUP diterima, file akan dibuka kembali, memungkinkan rotasi log [lihat logrotate (8) di RH.]

File log hanya akan dibuka kembali jika belasan mendeteksi bahwa rotasi telah terjadi (yaitu, file lama hilang atau inode berubah). belasan sangat kecil (jejak memori kurang dari 500 byte.)

jas_raj
sumber
Bisakah nohup menggunakan pipa alih-alih nohup.out?
Brian Minton
1
Anda dapat menggunakan pengalihan file (>) untuk menampilkan ke file selain nohup.out sesuai halaman manual:To save output to FILE, use 'nohup COMMAND > FILE'
jas_raj
4

Anda tidak dapat memutarnya. Anda dapat memotongnya dengan perintah >nohup.out, yang akan menghapus semua konten dalam file.

Anda dapat menyalin file pertama dan kemudian memotongnya, jika Anda perlu menyimpan hasilnya. Tetapi ada jendela kecil untuk balapan, di mana output dapat ditulis setelah Anda menyalin file tetapi sebelum Anda memotongnya. Output apa pun yang ditulis selama jendela itu akan hilang selamanya.

kasperd
sumber
1
Saya percaya pemotongan itu tidak akan membebaskan ruang pada disk sampai menangani file ditutup.
symcbean
@symcbean Keyakinan Anda salah. Memotong file membebaskan ruang segera.
kasperd
Copytruncate logrotate harus melakukan trik.
user9517
@Iain Langkah-langkah yang saya jelaskan setara dengan copytruncatedi logrotate. Tetapi nohup.outjarang jenis file yang akan Anda konfigurasikan untuk tugas cron diputar.
kasperd
2

Kamu tidak bisa

Anda dapat memutuskan tautan file (rm) tetapi data masih memiliki jejak pada disk dan akan terus ditulis selama ada pegangan file yang terbuka.

Anda dapat mengganti nama file - tetapi sekali lagi ini tidak menghentikannya ditulis (tetapi jika Anda memulai pekerjaan latar belakang secara teratur, yang lebih baru akan menulis ke file yang sama).

Benar-benar Anda harus secara eksplisit mengarahkan output pekerjaan ke sesuatu yang dirancang untuk menangani ini (mis. Apache rotatelogs ).

symcbean
sumber
logrotate copytruncate siapa pun?
user9517
Itu benar-benar tergantung pada apakah nohup menambahkan ke nohup.out baris-demi-baris, atau apakah itu mempertahankan pointer ke lokasi nohup.out. Lihat serverfault.com/questions/221337/… untuk contoh.
pepoluan
2

Tidak yakin apakah saya terlambat dalam hal ini. Tetapi untuk orang lain yang menemukan forum ini sekarang, saya tidak perlu mencoba apa pun dengan belasan atau apa pun.

Pekerjaan saya dimulai seperti ini:

nohup <my process> &

Ini memulai pekerjaan saya dan mulai menambahkan ke nohup.out di direktori itu.

Yang harus saya lakukan adalah mengatur logrotate yang biasanya datang dengan distro dan mengkonfigurasi sesuatu seperti ini di /etc/logrotate.conf

~/my abosolute path/nohup.out {
    size 1024k
    copytruncate
    rotate 100
    maxage 100
}

Dan itu berhasil !! nohup.out terpotong saat mendapatkan tambahan baru pada file yang sama. Prosesnya juga tidak mati. Dan nohup.out baru seperti nohup.out-20190528ini telah dibuat.

Semoga ini membantu.

Lokesh
sumber
1

Logrotate memiliki opsi copytruncate yang tersedia, yang akan memotong (kosong) file yang Anda tentukan setelah disalin ke skema rotasi normal (dan kompresi, jika disetel).

   copytruncate
          Truncate  the  original log file in place after creating a copy,
          instead of moving the old log file and optionally creating a new
          one,  It  can be used when some program can not be told to close
          its logfile and thus might continue writing (appending)  to  the
          previous log file forever.  Note that there is a very small time
          slice between copying the file and truncating it, so  some  log-
          ging  data  might be lost.  When this option is used, the create
          option will have no effect, as the old log file stays in  place.

Dari halaman logrotate .

Sgaduuw
sumber
1

Anda dapat melakukan sesuatu seperti ini:

cp nohup.out nohup.out.save # save it somewhere
echo "" > nohup.out

Anda tidak perlu membunuh aplikasi Anda.

Philippe Remy
sumber