Bagaimana saya bisa mencegah cron dari mengisi syslog saya?

32

Saya memiliki skrip yang perlu dijalankan setiap menit. Masalahnya adalah bahwa cron masuk ke /var/log/syslogsetiap kali dijalankan. Saya akhirnya melihat sesuatu seperti ini berulang-ulang di /var/log/syslog:

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

Saya menggunakan Debian.

Pertanyaan saya adalah: Apakah ada cara saya dapat memberitahu cron untuk tidak menulis informasi ini ke syslog setiap saat?

pengguna7321
sumber
1
Adakah yang tahu bagaimana melakukan ini pada platform Busybox? Format /etc/syslog.conf berbeda ...
Mark Lakata

Jawaban:

25

Anda dapat mengirim output cron ke fasilitas log terpisah, tambahkan yang berikut ke /etc/syslog.conffile Anda :

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

Ingatlah untuk menambahkan /var/log/cronke Anda /etc/logrotate.d/sysloguntuk memastikan itu diputar, misalnya

# /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
}
Dave Cheney
sumber
Terima kasih atas masukannya. Saya menambahkan cron. * / Var / log / cron dan restart cron tetapi terus membuang pesan ke / var / log / syslog sambil membiarkan / var / log / cron kosong. tidak yakin mengapa itu tidak melakukan apa
user7321
1
oh man, kegagalan epik di pihak saya. Saya mengedit syslog.conf dan memulai kembali cron !! Tidak heran itu tidak akan berhasil .. Seharusnya saya me-restart syslog =)
user7321
1
Mengaktifkan cron.log tidak mencegah pesan cron dari ditulis ke syslog.
basic6
16

Baik,

Solusi untuk pertanyaan saya adalah:

perubahan

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

untuk

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

di dalam /etc/syslog.confdan kemudian restart syslog

Saya juga memiliki cron yang dikirim /var/log/cron.logseperti yang disarankan oleh Dave Cheney dan menempelkan logrotate padanya. Saran saya dengan saran Daves optimal untuk situasi saya karena:

  1. itu tidak /var/log/syslogmenjadi berantakan dengan pesan cron
  2. Saya masih mendapatkan pesan cron (yang bagus untuk pemecahan masalah)
  3. logrotate menjaga /var/log/cron.logagar tidak terlalu besar.
pengguna7321
sumber
7
Bagi mereka yang peduli dengan sistem modern, ada rsyslogdalam Debian 8.0 Jessie, jadi itu yang /etc/rsyslog.confakan diedit. By the way, string yang akan ditambahkan sudah ada secara default, Anda hanya perlu menghapus komentar itu (baris 63). Dan /var/log/cron.logsudah ada di /etc/logrotate.d/syslog, sama seperti pengelola paket telah membaca utas ini.
TranslucentCloud
Pertanyaan Anda Is there any way I can tell cron not write this information to syslog every time. Ini bukan jawabannya.
NTD
@TranslucentCloud Hanya ingin menambahkan bahwa konfigurasi rsyslog saya di ubuntu 14 LTS ada di /etc/rsyslog.d/50-default.conf.
Johnny
8

Ubah / 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"

Secara default garis EXTRA_OPTS adalah ""

dfc
sumber
IMO ini adalah solusi yang tepat: jangan menghasilkan catatan log.
NTD
4

Di Ubuntu 14.04.5 (dan kemungkinan di tempat lain) ada rsyslogd bukan syslogd. TranslucentCloud mengisyaratkan hal ini dengan Debian Jessie, tetapi solusi yang sama (tetapi mengubah rsyslog.conf alih-alih syslogd.conf) tampaknya tidak berfungsi di Ubuntu.

Tampaknya nilai-nilai yang ditetapkan di /etc/rsyslog.d/50-default.conf akan benar-benar diutamakan daripada hal-hal yang diatur di /etc/rsyslog.conf, jadi lebih baik untuk membuat perubahan di sana dan kemudian restart rsyslog dan cron. Kalau tidak, Anda masih akan berakhir dengan perilaku default cron logging ke syslog, ditambah cron logging ke cronlog (tetapi tidak secara eksklusif).

Beberapa baris pertama di /etc/rsyslog.d/50-default.conf saya:

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

Dan voila!

ericus
sumber
1
Jawaban yang sangat bagus Yang mengatakan, Anda mungkin ingin fokus pada pertanyaan yang lebih baru untuk partisipasi masa depan dalam Stack Overflow karena ini sudah sangat lama.
Magellan
3

Saya baru saja menyelesaikan ini dengan cara yang berbeda, tetapi tujuan saya sedikit berbeda. Saya ingin membuang entri log cron yang dihasilkan saat atrun menyala sehingga hard drive saya dapat tidur dan tidak terbangun setiap 5 menit.

Anda dapat memiliki target acara log di syslog.conf menjadi perintah shell dengan awalan dengan pipa, dan jadi saya menggunakan grep untuk membuang yang tidak saya inginkan. Begitu:

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

Saya belum menyelidiki tetapi saya yakin ini mungkin untuk mengirim entri log tersebut ke target lain jika masih diinginkan.

Parakleta
sumber
3

Sebenarnya, solusi 'terbaik' (orang bisa mengklaim) adalah kombinasi dari apa yang disarankan @DaveCheney dan apa yang akhirnya dilakukan pengguna7321 , ditambah tindakan ketiga yang akan saya rekomendasikan:

  1. Mencegah syslogd dari menambahkan pesan log yang berhubungan dengan cron ke / var / log / syslog
  2. Memastikan pesan log cron dapat dicatat di suatu tempat (khususnya, di / var / log / cron) + memastikan rotasi log untuk log cron.
  3. Mencegah syslogd dari menambahkan pesan log yang berhubungan dengan cron ke / var / log / messages juga

Di Anda /etc/syslog.conf, kombinasi saran ini mengubah sesuatu seperti yang berikut:

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

ke:

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

Dan jangan lupa untuk memaksa memuat ulang (atau memulai ulang) layanan cron dan syslogd, misalnya menggunakan:

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

Catatan: Ini juga berfungsi dengan rsyslogd.

einpoklum - mengembalikan Monica
sumber
Solusi terbaik adalah apa yang disarankan @dfc, yaitu jangan membuat log di tempat pertama.
NTD