Verifikasi apakah crontab berfungsi

82

Saya ingin memverifikasi apakah crontab tertentu berfungsi dengan baik. Saya telah menambahkan pekerjaan seperti ini:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

Saya tahu bahwa saya mengarahkan ulang ke perangkat null, tetapi saya tidak yakin apakah perintah di atas baik.

* Edit 1: Di / var / log / syslog saya setiap dua menit saya memiliki kesalahan berikut:

 (CRON) error (grandchild #2788 failed with exit status 2)

* Edit 2: Tidak ada kesalahan dalam log dengan pekerjaan baru ini:

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
croppio.com
sumber
Sayangnya semua di atas mencoba tetapi tidak berhasil untuk saya. seperti yang Anda katakan percobaan / bin / sh -c "(ekspor PATH = / bin; /tmp/trial.sh </ dev / null)" menunjukkan pesan di bawah ini, tidak yakin apa itu / bin / sh: PATH = / bin : bukan pengidentifikasi

Jawaban:

73

Sintaks untuk entri crontab terlihat benar. Memang, jika Anda mengedit crontab Anda menggunakan " crontab -e" (seperti seharusnya), Anda akan mendapatkan kesalahan jika Anda menentukan entri crontab yang secara sintaksis tidak valid.

  1. Pertama, apakah /path_to_my_php_script/info.phpberjalan dengan benar dari command-line?

  2. Jika demikian, apakah ini juga berjalan dengan benar seperti ini ?:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. Jika itu berhasil, apakah berhasil seperti ini?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

Langkah (3) mirip dengan bagaimana cron akan menjalankan program Anda (seperti yang didokumentasikan dalam "man 5 cron").

Masalah yang paling mungkin Anda alami adalah bahwa cron PATH gunakan untuk menjalankan program Anda terlalu ketat. Oleh karena itu, Anda mungkin ingin menambahkan sesuatu seperti yang berikut ke bagian atas entri crontab Anda (Anda harus menambahkan direktori apa pun yang dibutuhkan skrip Anda):

PATH=~/bin:/usr/bin/:/bin

Perhatikan juga bahwa cron akan digunakan secara default /bin/sh, bukan bash. Jika Anda membutuhkan bash, tambahkan juga ini ke awal file crontab Anda:

SHELL=/bin/bash

Perhatikan bahwa kedua perubahan itu akan memengaruhi semua entri crontab. Jika Anda hanya ingin mengubah nilai-nilai ini untuk info.phpprogram Anda, Anda bisa melakukan sesuatu seperti ini:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

Perlu juga disebutkan bahwa pada sistem yang dikonfigurasikan untuk "mail" (dengan kata lain sebuah sistem yang memiliki MTA yang terkonfigurasi [sendmail / postfix / etc]), semua output dari program crontab dikirimkan kepada Anda melalui email secara otomatis. Sistem desktop Ubuntu default tidak akan mengonfigurasi surat lokal, tetapi jika Anda bekerja pada server, Anda cukup mengetik "mail" di terminal untuk melihat semua surat cron tersebut. Ini juga berlaku untuk perintah " at".

jamesodhunt
sumber
2
Saya mendapat izin ditolak untuk langkah ke-2. Apa yang harus saya lakukan?
akikara
@akikara chmod + x ./cron.sh - jelas ganti ./cron.sh dengan apa pun lokasi file Anda yang sedang Anda coba jalankan
Tisch
46

Meskipun sangat jarang, terkadang cron berhenti berfungsi dengan baik meskipun layanan sedang berjalan. Berikut ini cara memverifikasi bahwa crond berjalan dan menghentikan / memulai layanan.

Di Linux:

service crond status
service crond stop
service crond start

Di Ubuntu dan sistem berbasis Debian lainnya:

service cron status
service cron stop
service cron start
pengguna53817
sumber
13
Hanya sebuah catatan ... untuk Ubuntu cron, bukancrond
Amit Kohli
32

Jangan redirect output error ke / dev / null dan grep / var / log / syslog untuk output cron.

grep cron /var/log/syslog

Anda dapat segera menampilkan kesalahan saat menyimpan file setelah diedit /etc/crontabatau file di dalamnya /etc/cron.d/dengan:

tail -f /var/log/syslog | grep --line-buffered cron

Jika hasil pengeditan ok, Anda hanya akan melihat RELOADpemberitahuan, akan terjadi kesalahan seperti

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 
rubiojr
sumber
19

Anda dapat melihat cron aktif Anda dengan perintah terminal:

crontab -l

Berikut adalah urutan parameternya:

  1. min (0 - 59)

  2. jam (0 - 23)

  3. hari dalam sebulan (1 - 31)

  4. bulan (1 - 12)

  5. hari dalam seminggu (0 - 6) (Minggu = 0)

  6. perintah

Jadi, Anda memanggil skrip Anda setiap menit pertama setiap jam. Anda harus menguji output Anda pada interval yang lebih sering untuk tujuan pengujian:

* * * * * <command> #Runs every minute

Ini akan menyebutnya setiap menit!

bioShark
sumber
* / 2 * * * * saya telah berubah setiap dua menit sekarang
croppio.com
11

Untuk bagian waktu pada setiap baris, Anda dapat menggunakan cron tester ini untuk menguji / memverifikasi definisi waktu cron Anda.

Ashish Karpe
sumber
Itu saran yang bagus.
Rahil Wazir
2
juga bermanfaat: crontab-generator.org
rubo77
2

Saya percaya Anda juga dapat menggunakan run-partsuntuk menjalankan pekerjaan cron dari band. Sebenarnya apa yang digunakan cron sendiri untuk menjalankan pekerjaan cron periodik, jadi dengan memberikan argumen yang tepat Anda dapat menjalankannya kapan saja.

Jika Anda hanya ingin menjalankan satu file alih-alih semua pekerjaan cron yang didefinisikan misalnya /etc/cron.dailyAnda harus memberikan argumen regex bersama dengan regex yang valid.run-parts --list --regex '^p.*d$' /etc

Ingatlah bahwa tugas cron biasanya dinamai tanpa ekstensi dan ditandai sebagai dapat dieksekusi, jadi pastikan skrip Anda serupa, meskipun menggunakan regex dapat memungkinkan Anda untuk memicu skrip dengan ekstensi.

dragon788
sumber
1

ah !!

mendapat jawabannya sendiri, saya memeriksa dan tidak menemukan cronddi dalam direktori instalasi default yaitu/etc/init.d/

sekarang akan mencoba dan membalas.

Catatan - Saya sudah memeriksa cron.allow, cron.denyjuga. Sejauh ini semuanya baik-baik saja.

semoga beruntung
sumber