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.)
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.
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 ).
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
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.
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.
Jawaban:
Anda harus melihat belasan dalam kombinasi dengan
logrotate
. Jika Anda menyalurkan output aplikasi Anda melalui ini, maka Anda dapatSIGHUP
memproses belasan tanpa harus mematikan aplikasi Anda yang sedang berjalan.sumber
To save output to FILE, use 'nohup COMMAND > FILE'
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.
sumber
copytruncate
dilogrotate
. Tetapinohup.out
jarang jenis file yang akan Anda konfigurasikan untuk tugas cron diputar.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 ).
sumber
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:
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
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-20190528
ini telah dibuat.Semoga ini membantu.
sumber
Logrotate memiliki opsi copytruncate yang tersedia, yang akan memotong (kosong) file yang Anda tentukan setelah disalin ke skema rotasi normal (dan kompresi, jika disetel).
Dari halaman logrotate .
sumber
Anda dapat melakukan sesuatu seperti ini:
Anda tidak perlu membunuh aplikasi Anda.
sumber