ข้อผิดพลาด nginx logrotate ในงาน cron


10

ฉันใช้ Ubuntu 14.04 LTS และ nginx ใน Digital Ocean VPS และได้รับอีเมลเหล่านี้เป็นครั้งคราวเกี่ยวกับงาน cron ที่ล้มเหลว:

เรื่อง

การทดสอบ Cron -x / usr / sbin / anacron || (cd / && run-parts --report /etc/cron.daily)

เนื้อหาของอีเมลคือ:

/etc/cron.daily/logrotate: ข้อผิดพลาด: ข้อผิดพลาดในการรันสคริปต์ postrotate ที่ใช้ร่วมกันสำหรับ '/var/log/nginx/*.log' run-parts: /etc/cron.daily/logrotate ออกมาพร้อมกับรหัสส่งคืน 1

มีความคิดเห็นเกี่ยวกับวิธีการแก้ไขปัญหานี้หรือไม่?

ปรับปรุง:

/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 
}

ปรับปรุง:

$ sudo invoke-rc.d nginx rotate
initctl: invalid command: rotate
Try `initctl --help' for more information.

ดูเหมือนว่าจะไม่สามารถเรียกใช้สิ่งที่ระบุไว้เป็นการกระทำ postrotate แสดง/etc/logrotate.d/nginixสคริปต์ของคุณให้กับเรา
X Tian

/var/log/nginx/*.log {รายสัปดาห์ที่หายไปหมุน 52 การบีบอัดล่าช้าแจ้งเตือนหากไม่สร้าง 0640 www-data adm sharedscripts prerotate prerotate ถ้า [-d /etc/logrotate.d/httpd-prerotate]; จากนั้น \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ endscript postrotate invoke-rc.d nginx หมุน> / dev / null 2> & 1 ลงท้ายข้อความ}
Chris

1
เป็นเรื่องปกติที่จะอัปเดตคำถามของคุณพร้อมข้อมูลเพิ่มเติมเมื่อมีการร้องขอ 4 ช่องว่างที่จุดเริ่มต้นของแต่ละบรรทัดทำให้เป็นรหัสบล็อก
X Tian

ดังนั้นinvoke-rc.d nginx rotateล้มเหลวลองใช้งานในฐานะผู้ใช้ที่เหมาะสมและแสดงสคริปต์นั้นให้เราทราบแล้ววางผลลัพธ์ลงในคำถามเดิมของคุณ TKS
X Tian

พยายามเรียกใช้แล้วได้รับข้อผิดพลาดของคำสั่งที่ไม่ถูกต้อง
Chris

คำตอบ:


10

การดำเนินการหมุนโพสต์ไม่ถูกต้อง

ลอง

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

หากคุณดูnginxคำสั่งคุณจะเห็นการกระทำที่จะยอมรับ ข้อความที่คุณได้รับการตรวจสอบด้วยinitctl --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.

ดังนั้นการรีโหลดจึงควรใช้งานได้และส่งสัญญาณ HUP ไปที่ nginx เพื่อบังคับให้เปิดไฟล์บันทึกอีกครั้ง


ขอบคุณดูเหมือนว่าคำสั่งจะทำงานโดยไม่มีข้อผิดพลาด ฉันจะอัปเดตงาน cron และเราจะไปจากที่นั่น
Chris

4

ดังที่กล่าวไว้ในคำตอบอื่นปัญหาคือการinvoke-rc.d nginx rotateส่งคืนข้อผิดพลาดที่ระบุว่าการrotateกระทำไม่ได้รับการสนับสนุน สิ่งที่น่าสนใจคือมันservice nginx rotateทำงานได้โดยไม่มีปัญหา

ฉันเดาว่าinvoke-rc.dwrapper ไม่รองรับการทำงานทั้งหมดที่สคริปต์ nginx init สนับสนุนจริง

การเปลี่ยนinvoke-rc.d nginx rotateเป็นservice nginx rotateควรแก้ไขปัญหา


3

ฉันไม่แน่ใจว่าเป็นเพราะinitctlยาไม่รองรับrotateตัวเลือกและเมื่อมันถูกลบออก แต่คุณไม่ได้เป็นคนเดียวที่ได้รับผลกระทบจากสิ่งนี้และมีรายงานบั๊กแบบเปิดสำหรับสิ่งนี้บน launchpad

ดังที่ได้กล่าวถึงโดยคำตอบอื่น ๆ ด้านบนและด้านล่างคุณสามารถแก้ไขไฟล์ nignx logrotate และแทนที่บรรทัดที่มีปัญหา

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

กับทางเลือกอื่น ๆ ที่ใช้งานได้

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`

วิธีใดที่คุณเลือกโปรดอย่าเปลี่ยนไฟล์ที่จัดการโดยแพ็คเกจและหลังจากที่คุณเปลี่ยนมันจะไม่ได้รับการอัปเดตอีกและคุณจะต้องแก้ไข diff หรือเขียนทับไฟล์ด้วยตนเอง ใหม่ (ซึ่งทั้งหมดรวมถึงการแก้ไข)


ฉันไม่แน่ใจว่าข้อผิดพลาด "คำสั่งบริการไม่ทำงาน" ใช้ที่นี่เนื่องจากมีปัญหาที่แตกต่างกันในแต่ละจุด (ความจริงสนุก: ฉันมีการแก้ไขในการทำงานสำหรับ 1450,770)
โทมัสวอร์ด

1

ทำงานให้ฉัน:
แทนที่
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
ด้วย
postrotate service nginx rotate >/dev/null 2>&1


0

แทนที่:

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

ด้วย:

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

ดูเหมือนว่าในรุ่นที่ใหม่กว่าของ Nginx งานนี้ ฉันใช้เวอร์ชั่น 1.9 อยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.