Làm cách nào tôi có thể ngăn cron điền vào syslog của mình?


31

Tôi có một kịch bản cần được thực hiện mỗi phút. Vấn đề là cron đang đăng nhập /var/log/syslogmỗi lần nó thực thi. Tôi cuối cùng thấy một cái gì đó như thế này lặp đi lặp lại trong /var/log/syslog:

Jun 25 00:56:01 myhostname /USR/SBIN/CRON[1144]: (root) CMD (php /path/to/script.php > /dev/null)

Tôi đang sử dụng Debian.

Câu hỏi của tôi là: Có cách nào tôi có thể nói với cron không viết thông tin này vào syslog mỗi lần không?


1
Bất kỳ ý tưởng làm thế nào để làm điều này trên nền tảng Busybox? Định dạng của /etc/syslog.conf là khác nhau ...
Mark Lakata

Câu trả lời:


25

Bạn có thể gửi đầu ra của cron đến một cơ sở nhật ký riêng biệt thêm phần sau vào /etc/syslog.conftệp của bạn :

# Log cron stuff
cron.*                                                  /var/log/cron

Hãy nhớ thêm /var/log/cronvào của bạn /etc/logrotate.d/syslogđể đảm bảo nó được xoay, vd

# /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

Cảm ơn bạn đã nhập. Tôi đã thêm cron. * / Var / log / cron và khởi động lại cron nhưng nó vẫn tiếp tục chuyển các thông điệp vào / var / log / syslog trong khi để trống / var / log / cron. không chắc chắn tại sao nó không làm gì cả
user7321

1
người đàn ông, thất bại sử thi về phía tôi. Tôi đã chỉnh sửa syslog.conf và khởi động lại cron !! Không có gì ngạc nhiên khi nó không hoạt động .. Tôi nên khởi động lại syslog =)
user7321

1
Kích hoạt cron.log không ngăn các tin nhắn cron được ghi vào syslog.
bản6

16

Được,

Giải pháp cho câu hỏi của tôi là:

thay đổi

*.*;auth,authpriv.none     -/var/log/syslog

đến

*.*;cron,auth,authpriv.none     -/var/log/syslog

trong /etc/syslog.confvà sau đó khởi động lại syslog

Tôi cũng có cron được gửi đến /var/log/cron.logtheo đề nghị của Dave Cheney và dán một logrotate lên nó. Khắc phục của tôi với đề xuất của Daves là tối ưu cho tình huống của tôi vì:

  1. nó không /var/log/syslogbị lộn xộn với các tin nhắn cron
  2. Tôi vẫn nhận được tin nhắn cron (rất tốt để khắc phục sự cố)
  3. logrotate giữ cho /var/log/cron.logđi quá lớn.

7
Đối với những người quan tâm đến các hệ thống hiện đại, có một phiên rsyslogbản Debian 8.0 Jessie, vì vậy đây là bản /etc/rsyslog.confchỉnh sửa. Nhân tiện, các chuỗi được thêm vào đã được mặc định ở đó, bạn chỉ cần bỏ ghi chú (dòng 63). Và /var/log/cron.logđã có trong /etc/logrotate.d/syslog, giống như các nhà bảo trì gói đã đọc chủ đề này.
translucentCloud

Câu hỏi của bạn là Is there any way I can tell cron not write this information to syslog every time. Đây không phải là câu trả lời.
ntd

@TranslucentCloud Chỉ muốn thêm rằng cấu hình rsyslog của tôi trên ubfox 14 LTS đã ở /etc/rsyslog.d/50-default.conf.
Johnny

8

Thay đổi / etc / default / cron

  # Or, to log standard messages, plus jobs with exit status != 0:
  # EXTRA_OPTS='-L 5' 
  #
  # For quick reference, the currently available log levels are:
  #   0   no logging (errors are logged regardless)
  #   1   log start of jobs
  #   2   log end of jobs
  #   4   log jobs with exit status != 0
  #   8   log the process identifier of child process (in all logs)
  #
  EXTRA_OPTS="-L 0"

Theo mặc định, dòng EXTRA_OPTS là ""


IMO này là giải pháp chính xác: không tạo bản ghi nhật ký.
ntd

4

Trong Ubuntu 14.04.5 (và có thể ở nơi khác) có rsyslogd thay vì syslogd. TranslucentCloud đã gợi ý điều này với Debian Jessie, nhưng cùng một giải pháp (nhưng thay đổi rsyslog.conf thay vì syslogd.conf) dường như không hoạt động trong Ubuntu.

Dường như các giá trị được đặt trong /etc/rsyslog.d/50-default.conf sẽ thực sự được ưu tiên hơn các công cụ được đặt trong /etc/rsyslog.conf, vì vậy tốt hơn là thực hiện các thay đổi ở đó và sau đó khởi động lại rsyslog và cron. Nếu không, bạn vẫn sẽ kết thúc với hành vi mặc định của ghi nhật ký cron vào syslog, cộng với ghi nhật ký cron vào cronlog (nhưng không độc quyền).

Một vài dòng đầu tiên trong /etc/rsyslog.d/50-default.conf:

*.*;cron,auth,authpriv.none     -/var/log/syslog
cron.*                          /var/log/cron.log

Và Voila!


1
Câu trả lời rất hay. Điều đó nói rằng, bạn có thể muốn tập trung vào các câu hỏi mới hơn để tham gia vào Stack Overflow trong tương lai vì câu hỏi này cực kỳ cũ.
Magellan

3

Tôi chỉ giải quyết điều này theo một cách khác, nhưng mục tiêu của tôi hơi khác. Tôi muốn loại bỏ các mục nhật ký cron đã được tạo khi bị tấn công để các ổ cứng của tôi có thể ngủ và không bị đánh thức cứ sau 5 phút.

Bạn có thể có mục tiêu của một sự kiện nhật ký trong syslog.conf là một lệnh shell bằng cách thêm tiền tố vào đường ống và vì vậy tôi đã sử dụng grep để loại bỏ những thứ tôi không muốn. Vì thế:

cron.*              | grep -v "(/usr/libexec/atrun)" >> /var/log/cron.log

Tôi chưa điều tra nhưng tôi tin rằng có thể gửi những mục nhật ký đó đến mục tiêu khác nếu họ vẫn muốn.


3

Trên thực tế, giải pháp 'tốt nhất' (người ta có thể yêu cầu) là sự kết hợp của những gì @DaveCheney đã đề xuất và những gì người dùng7321 đã làm , cộng với hành động thứ ba mà tôi muốn giới thiệu:

  1. Ngăn chặn syslogd nối thêm các thông điệp nhật ký liên quan đến cron vào / var / log / syslog
  2. Đảm bảo thông điệp nhật ký cron được ghi lại ở đâu đó (cụ thể, trong / var / log / cron) + đảm bảo xoay vòng nhật ký cho nhật ký cron.
  3. Ngăn chặn syslogd nối thêm các thông điệp nhật ký liên quan đến cron vào / var / log / message

Theo bạn /etc/syslog.conf, sự kết hợp của những gợi ý này sẽ thay đổi một số thứ như sau:

*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;daemon.none;mail,news.none       -/var/log/messages

vào:

cron.*                                              /var/log/cron.log
*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;cron,daemon.none;mail,news.none  -/var/log/messages

Và đừng quên buộc tải lại (hoặc khởi động lại) cả dịch vụ cron và syslogd, ví dụ: sử dụng:

/etc/init.d/syslogd force-reload
/etc/init.d/cron force-reload

Lưu ý: Điều này cũng hoạt động với rsyslogd.


Giải pháp tốt nhất là những gì @dfc đề xuất, tức là không tạo nhật ký ở vị trí đầu tiên.
ntd
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.