lỗi nginx logrotate trong công việc định kỳ


10

Tôi đang chạy Ubuntu 14.04 LTS và nginx trên VPS Digital Ocean và thỉnh thoảng nhận được những email này về một công việc định kỳ không thành công:

Môn học

Kiểm tra cron -x / usr / sbin / anacron | | (cd / && run-tùng --report /etc/cron.d Daily)

Phần chính của email là:

/etc/cron.d Daily / logate

Bất kỳ suy nghĩ về cách tôi có thể giải quyết điều này?

Cập nhật:

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

Cập nhật:

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

có vẻ như nó không thể chạy những gì được chỉ định là hành động postrotate, hãy cho chúng tôi xem /etc/logrotate.d/nginixkịch bản của bạn
X Tian

/var/log/nginx/*.log {mất tích hàng tuần xoay 52 nén độ trễ nén thông báo tạo 0640 dữ liệu www adm sharedscripts prerotate nếu [-d /etc/logrotate.d/httpd-prerotate]; sau đó \ run-tùng /etc/logrotate.d/httpd-prerotate; \ fi \ endcript postrotate invoke-rc.d nginx xoay> / dev / null 2> & 1 endcript}
Chris

1
Việc cập nhật câu hỏi của bạn với thông tin thêm khi được yêu cầu là bình thường. 4 khoảng trắng ở đầu mỗi dòng làm cho nó thành một khối mã.
X Tian

Vì vậy, invoke-rc.d nginx rotatekhông thành công, hãy thử chạy nó với tư cách là người dùng phù hợp và cũng cho chúng tôi thấy tập lệnh đó, dán đầu ra vào câu hỏi ban đầu của bạn. tks.
X Tian

Đã thử chạy nó, nhận được một lỗi lệnh không hợp lệ.
Chris

Câu trả lời:


9

Hành động xoay bài dường như không chính xác

Thử

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

Nếu bạn nhìn vào nginxlệnh bạn sẽ thấy các hành động mà nó sẽ chấp nhận. Ngoài ra tin nhắn bạn nhận được nói kiểm trainitctl --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.

vì vậy tải lại nên hoạt động và gửi tín hiệu HUP đến nginx để buộc mở lại logfiles.


Cảm ơn bạn, lệnh đó dường như đã chạy mà không có lỗi. Tôi sẽ cập nhật công việc định kỳ và chúng tôi sẽ đi từ đó.
Chris

Có một lỗi đánh máy (nginix), nhưng tôi không thể chỉnh sửa vì đó là một thay đổi char duy nhất.
Koen.

4

Như đã đề cập trong một câu trả lời khác, vấn đề là invoke-rc.d nginx rotatetrả về một lỗi cho biết rằng rotatehành động không được hỗ trợ. Điều thú vị là service nginx rotatehoạt động mà không có vấn đề.

Tôi đoán là invoke-rc.dtrình bao bọc không hỗ trợ tất cả các hành động mà tập lệnh nginx init thực sự hỗ trợ.

Thay đổi invoke-rc.d nginx rotateđể service nginx rotategiải quyết vấn đề.


3

Tôi không chắc liệu nó có phải vì initctlliều không hỗ trợ rotatetùy chọn hay không và khi nó bị xóa, nhưng bạn không phải là người duy nhất bị ảnh hưởng bởi điều này, và có báo cáo lỗi mở cho điều này trên launchpad.

Như được đề cập bởi các câu trả lời khác ở trên & bên dưới, bạn có thể chỉnh sửa tệp logrotate nignx và thay thế dòng xuất sắc

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

với các lựa chọn khác hoạt động,

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`

Dù bạn đã chọn phương pháp nào, xin vui lòng không thay đổi tệp được quản lý bởi gói và sau khi bạn thay đổi, nó sẽ không được cập nhật nữa và bạn sẽ phải giải quyết thủ công khác biệt hoặc ghi đè lên nó bằng một cái mới (tất cả đã sẵn sàng bao gồm sửa lỗi).


Tôi không chắc lỗi "lệnh dịch vụ không hoạt động" được áp dụng ở đây, vì có các vấn đề khác nhau được giải quyết trong mỗi lỗi. (Sự thật thú vị: Tôi có một bản sửa lỗi trong các tác phẩm cho 1450770)
Thomas Ward

1

Làm việc cho tôi:
Thay thế
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
bằng
postrotate service nginx rotate >/dev/null 2>&1


0

Thay thế:

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

Với:

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

dường như trên các phiên bản mới hơn của Nginx điều này hoạt động. Tôi đang chạy phiên bản 1.9.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.