Kami saat ini meningkatkan dari Ubuntu 12,04 LTS ke 14,04 LTS pada server aplikasi ruby on rails kami, dan telah memperhatikan bahwa file log tidak lagi berputar.
Di kedua mesin kami memiliki file yang /var/app-name/config/logrotate
dimiliki oleh pengguna unix kami deployer
yang berisi file logrotate yang valid sebagai berikut:
/var/app-name/log/*.log {
daily
rotate 365
delaycompress
compress
dateext
dateformat -%Y%m%d
missingok
copytruncate
}
Ini kemudian dihubungkan ke /etc/logrotate.d/
direktori sebagaiapp-name
Pada server Ubuntu 12.04 kami, kami memiliki logrotate 3.7.8 yang berjalan dengan baik. Ini masuk ke var/app-name/log/
direktori dan memutar semua file log
Tetapi pada server Ubuntu 14.04 kami memiliki logrotate 3.8.7 yang tidak memutar file log untuk aplikasi kami.
Ketika saya men-debug ini melalui sudo logrotate -d -f /etc/logrotate/.conf
saya mendapatkan output berikut:
Ignoring /etc/logrotate.d/app-name because the file owner is wrong (should be root).
Mengejar ini dalam kode, tampaknya perubahan ini ditambahkan untuk aliran rilis 3.8.x: https://github.com/demands/logrotate/commit/b8ce386a969c60e5c8ee78023c24a1ba0aab1526
Jika saya mengubah kepemilikan file yang disinkronkan /var/app-name/config/logrotate
ke root
maka mulai berfungsi lagi. Tetapi mengingat file ini adalah bagian dari aplikasi saya, dan dibuat oleh kerangka kerja penyebaran capistrano yang kami gunakan di negara ini, saya lebih suka tidak perlu mengubah kepemilikannya, ketika dulu berfungsi dengan baik.
Jadi, apakah file konfigurasi symlinked direkomendasikan / didukung oleh logrotate?
Dan jika demikian, haruskah penolakan untuk menggunakan file saya (dimiliki oleh deployer
) yang disinkronkan ke /etc/logrotate.d
direktori, dilihat sebagai bug?
Atau apakah ada pendekatan lain yang disarankan untuk rotasi log khusus aplikasi?
(juga ditanya tentang unix StackExchange )
sumber
Jawaban:
Masalahnya adalah bahwa file konfigurasi logrotate dapat menjalankan perintah apa pun sebagai root (menggunakan bait prerotate / postrotate). Oleh karena itu, Anda secara efektif akan memberikan
deployer
hak root pengguna Anda dengan memberikannya akses tulis ke file di/etc/logrotate.d/
. Jadi tidak, ini bukan bug.Jika Anda mempercayai pengguna penempatan Anda, maka saya kira Anda bisa menyelesaikan masalah dengan memberikannya hak sudo untuk menyalin file
/etc/logrotate.d/
. Dengan asumsi, tentu saja, bahwa pengguna penyebar tidak sama dengan yang dijalankan oleh aplikasi web.sumber
Saya menyadari bahwa saya agak terlambat ke pesta, tetapi saya memiliki masalah yang sama dan berpikir saya akan membagikan solusi saya.
Masalah saya mulai ketika
logrotate
tidak mau membaca konfigurasi yang saya tulis. Saya tidak ingin menyebarkan konfigurasi baru ke folder yang dimiliki oleh root karena saya tidak ingin pengguna menyebarkan memiliki akses root ke apa pun .Pada awalnya saya mencoba untuk menjalankan
logrotate
sebagai pengguna penyebaran, tetapi mengeluh tentang memiliki akses ke file negara di/var/lib/logrotate/state
. Lalu saya membaca halaman manual. Anda dapat menentukan file status yanglogrotate
digunakan! Jadi, sepertinya solusi yang lebih baik bagi saya untuk mengatur cron harian untuk dieksekusilogrotate
sebagai pengguna penyebaran dengan file status kustom. Dengan cara ini, tidak ada akses root diperlukan oleh pengguna menyebarkan atau aplikasi.Inilah cara Anda menentukan file status:
Sekarang Anda dapat menjalankan logrotate sebagai sembarang pengguna dan pemilik konfigurasi yang Anda sukai!
sumber