Bagaimana saya bisa tahu jika pekerjaan cron per jam saya telah berjalan?

26

Saya telah menciptakan sebuah file yang bernama ntpdatedi/etc/cron.hourly

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

Saya juga melakukan Chmod 755 ke file ini.

Namun, saya tidak tahu apakah file tersebut sudah berjalan atau belum!

File tidak dibuat di salah satu dari 3 direktori.

Jika saya menjalankan secara manual cd / && run-parts --report /etc/cron.hourlymaka file dibuat dan saya mendapatkan gema.

Adakah yang bisa merekomendasikan (idealnya langkah demi langkah!) Instruksi untuk menguji bahwa itu berfungsi?

wilhil
sumber

Jawaban:

25

Salah satu perangkap utama untuk cron adalah cron berjalan di lingkungan shell yang sangat terbatas, sebagai akibatnya banyak variabel tidak diekspor ke lingkungan, terutama $ PATH. Pastikan Anda menggunakan semua jalur mutlak untuk dieksekusi, termasuk fungsi umum seperti echo, uptime, date, dll semua perlu menggunakan jalur penuh ( /bin/echo, /bin/date, /usr/bin/uptime). Untuk menentukan path ke executable, Anda dapat menggunakan whichperintah seperti ini: which echo- ini akan menunjukkan Anda path lengkap ke alat itu.

Marco Ceppi
sumber
Seperti yang dibahas dalam obrolan, terima kasih untuk ini dan saya benar-benar berharap ini akan membantu orang lain ... Sementara saya melakukan jalan jatuh ke ntpdate, saya sangat terbiasa dengan Windows dan echo / date hanya "built in", saya hanya tidak melakukannya t pikir saya perlu path lengkap ... belajar lebih banyak tentang Linux dan itu masuk akal!
wilhil
36

Anda harus melihat dalam /var/log/syslogfile log Anda . Jika cron telah berjalan, itu akan memiliki garis seperti:

Jun 11 19:09:01 penguin CRON[17376]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Untuk tips pemecahan masalah, lihat https://help.ubuntu.com/community/CronHowto#Troubleshooting_and_Common_Problems

Lekensteyn
sumber
Tidak ada apa-apa di Syslog dan saya tidak bisa melihat alasan mengapa itu akan gagal dari tautan itu :(
wilhil
1
Jika tidak ada entri di syslog ( grep -i cron /var/log/syslog /var/log/syslog.1), mulailah memeriksa apakah cron daemon berjalan: ps uww -C cronharus berisi baris dengan suatu proses.
Lekensteyn
Maaf karena menyesatkan, ada keinginan untuk Cron di syslog, tidak ada yang berhubungan dengan perintah ini ... Saya tahu beberapa pekerjaan dijalankan karena setiap jam, saya mendapatkan peringatan email baru ... AFAIK, yang bekerja adalah dari crontab, tidak ada yang ada di cron.hourly itulah yang saya coba untuk bekerja
wilhil
2

Coba ubah baris pertama skrip Anda (penerjemah) menjadi:

#!/bin/bash

Saya juga punya masalah di masa lalu, dengan variabel lingkungan dan masalah PATH. Setelah mengubah penerjemah ke bashmasalah saya hilang.

Awi
sumber
1

Mengingat saya telah menambahkan clearme.shskrip di/etc/cron.hourly/

Cukup filter tugas CRON di terminal dengan egrep dan awk yang kuat :

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

Outputnya akan terlihat seperti:

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

Untuk menjelaskan semuanya langkah demi langkah:

  1. cat / var / log / syslog - cetak saya log Sistem
  2. egrep clearme - tetapi hanya memilih baris yang berisi teks clearme
  3. awk "{print $ 1}" - cetak saya baris yang berisi teks clearme
  4. > ~ / Desktop / cronlog.txt - menampilkan hasil dalam file cronlog.txt yang terletak di direktori Desktop .

Langkah ke-4 adalah opsional. Itu hanya akan mencetak hasil di terminal bukan file.

Daniel Andrei Mincă
sumber