nginx logrotate error pada pekerjaan cron

10

Saya menjalankan Ubuntu 14.04 LTS dan nginx pada Digital Ocean VPS dan sesekali menerima email ini tentang pekerjaan cron yang gagal:

Subyek

Tes Cron -x / usr / sbin / anacron || (cd / && run-parts --laporan /etc/cron.daily)

Badan email adalah:

/etc/cron.daily/logrotate: error: error menjalankan skrip postrotate bersama untuk '/var/log/nginx/*.log' run-parts: /etc/cron.daily/logrotate keluar dengan kode pengembalian 1

Adakah pemikiran tentang bagaimana saya bisa menyelesaikan ini?

Memperbarui:

/var/log/nginx/*.log {
  weekly
  missingok 
  rotate 52 
  compress 
  delaycompress
  notifempty 
  create 0640 www-data adm
  sharedscripts
  prerotate
      if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
          run-parts /etc/logrotate.d/httpd-prerotate; \
      fi
  endscript 
  postrotate 
      invoke-rc.d nginx rotate >/dev/null 2>&1
  endscript 
}

Memperbarui:

$ sudo invoke-rc.d nginx rotate
initctl: invalid command: rotate
Try `initctl --help' for more information.
Chris
sumber
sepertinya tidak bisa menjalankan apa yang ditentukan sebagai tindakan postrotate, tunjukkan /etc/logrotate.d/nginixskrip Anda
X Tian
/var/log/nginx/*.log {Weekly missingok rotate 52 kompres delaycompress notifempty create 0640 www-data adm sharedscripts prerotate if [-d /etc/logrotate.d/httpd-prerotate]; kemudian \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ berakhiran postrotate invoke-rc.d nginx rotate> / dev / null 2> & 1 naskah akhir}
Chris
1
Adalah normal untuk memperbarui pertanyaan Anda dengan informasi lebih lanjut ketika diminta. 4 spasi di awal setiap baris membuatnya menjadi blok kode.
X Tian
Jadi, invoke-rc.d nginx rotategagal, coba jalankan itu sebagai pengguna yang tepat, dan tunjukkan skrip itu juga kepada kami, rekatkan output ke pertanyaan awal Anda. tks.
X Tian
Mencoba menjalankannya, menerima kesalahan perintah yang tidak valid.
Chris

Jawaban:

10

Tindakan memutar pos tampaknya tidak benar

Mencoba

invoke-rc.d nginx reload >/dev/null 2>&1

Jika Anda melihat nginxperintah, Anda akan melihat tindakan yang akan diterimanya. Juga pesan yang Anda dapat mengatakan cekinitctl --help

xtian@fujiu1404:~/tmp$ initctl help
Job commands:
  start                       Start job.
  stop                        Stop job.
  restart                     Restart job.
  reload                      Send HUP signal to job.
  status                      Query status of job.
  list                        List known jobs.

jadi memuat ulang harus bekerja dan mengirim sinyal HUP ke nginx untuk memaksa membuka kembali file log.

X Tian
sumber
Terima kasih, perintah itu tampaknya telah berjalan tanpa kesalahan. Saya akan memperbarui pekerjaan cron dan kami akan pergi dari sana.
Chris
4

Seperti disebutkan dalam jawaban lain, masalahnya adalah invoke-rc.d nginx rotatemengembalikan kesalahan yang menyatakan bahwa rotatetindakan tidak didukung. Yang menarik adalah service nginx rotatebekerja tanpa masalah.

Dugaan saya adalah bahwa invoke-rc.dpembungkus tidak mendukung semua tindakan yang didukung oleh skrip init nginx yang sebenarnya.

Mengubah invoke-rc.d nginx rotateke service nginx rotateharus menyelesaikan masalah.

Robin Smidsrød
sumber
3

Saya tidak yakin apakah itu karena initctldosis tidak mendukung rotateopsi, dan ketika itu dihapus, tetapi Anda bukan satu-satunya yang terpengaruh oleh ini, dan ada laporan bug terbuka untuk ini pada launchpad.

Seperti disebutkan oleh jawaban lain di atas & di bawah ini, Anda dapat mengedit file log nignx nignx dan mengganti baris problmatic

invoke-rc.d nginx reload >/dev/null 2>&1

dengan alternatif lain yang berfungsi,

start-stop-daemon --stop --signal USR1 --quiet --pidfile /run/nginx.pid --name nginx
# or 
service nginx rotate >/dev/null 2>&1
# or
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`

Apa pun metode yang Anda pilih, harap Anda tidak mengubah file yang dikelola oleh sebuah paket, dan setelah Anda mengubahnya, itu tidak akan diperbarui lagi dan Anda harus menyelesaikan secara manual atau menimpa dengan yang baru (yang semuanya sudah siap termasuk perbaikannya).

Rabin
sumber
Saya tidak yakin bug "perintah layanan tidak berfungsi" berlaku di sini, karena ada masalah berbeda yang dibahas di setiap bug. (Fakta menyenangkan: Saya memiliki perbaikan dalam karya untuk 1450770)
Thomas Ward
1

Bekerja untuk saya:
Diganti
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
dengan
postrotate service nginx rotate >/dev/null 2>&1

Jadeye
sumber
0

Menggantikan:

invoke-rc.d nginx reload >/dev/null 2>&1

Dengan:

[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`

Tampaknya pada versi yang lebih baru dari Nginx ini berfungsi. Saya menjalankan versi 1.9.

bonitarunner
sumber