it-swarm-id.com

Mengapa crontab saya tidak terpicu?

Saya menggunakan crontab -e untuk menambahkan baris berikut ke crontab saya:

* * * * * echo hi >> /home/myusername/test

Namun, saya tidak melihat bahwa file tes ditulis untuk. Apakah ini masalah izin, atau apakah crontab tidak berfungsi dengan benar?

Saya melihat bahwa proses cron sedang berjalan. Bagaimana saya bisa men-debug ini?

Edit - Tanyakan Ubuntu telah pertanyaan yang bagus tentang crontab , sayangnya itu masih tidak membantu saya.

Edit 2 - Hmm, sepertinya file tes saya memiliki 214 baris, yang berarti selama 214 menit terakhir ini telah ditulis untuk setiap menit. Saya tidak yakin apa masalahnya, tapi ternyata sudah hilang.

29
ripper234

Ada implementasi cron (tidak semuanya, dan saya tidak ingat yang mana, tapi saya pernah menjumpai satu di Linux) yang memeriksa file crontab yang diperbarui setiap menit, dan tidak mempertimbangkan entri baru hingga menit berikutnya. Karena itu, crontab dapat memakan waktu hingga dua menit untuk pertama kali. Ini mungkin yang Anda amati.

Sudahkah Anda menambahkan baris kosong setelah cronjob Anda ?

28
gelraen

Saya memiliki masalah yang sama - crontab yang bekerja tiba-tiba berhenti setelah saya menambahkan entri baru di akhir. Ternyata saya lupa meletakkan baris baru setelah baris terakhir itu.

Saya mengetahuinya dengan mengeluarkan perintah

cat /var/log/syslog | grep crontab

dan output menunjukkan masalah:

Jul  2 08:16:01 shiva cron[1254]: (*system*) RELOAD (/etc/crontab)
Jul  2 08:16:01 shiva cron[1254]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)

Menambahkan baris baru dan menyimpan menyelesaikan masalah.

10
uniomni

Kedengarannya seperti ini sudah diperbaiki. Lain kali, coba masuk juga ke STDERR. Berikut ini hanya akan masuk ke STDOUT, bukan STDERR:

* * * * * echo hi >> /home/myusername/test

Coba pastikan ada klausa eksplisit untuk STDERR juga. Jika tidak, STDERR dapat dikirim melalui email ke pengguna (dengan asumsi bahwa email berfungsi) atau mungkin tidak menuju ke mana-mana, tergantung pada bagaimana Cron dikonfigurasi.

* * * * * echo hi >> /home/myusername/test 2> /home/myusername/test.stderr

Preferensi saya adalah mengirim output cronjob ke syslog. Dengan begitu saya mengambil keuntungan dari infrastruktur syslog yang ada (syslog terpusat, Splunk, rotasi log sudah didukung, mudah untuk membandingkan pesan di/var/log/messages &/var/log/cronjob, dll), dan saya tidak mengirim spam ke sysadmin (saya) dengan email yang tidak perlu.

* * * * * echo hi >> /home/myusername/test 2>&1 | /usr/bin/logger -t mycronjob
5
Stefan Lasiewski

Bagi saya masalahnya adalah skrip tidak dapat dieksekusi. Saya telah crontab -e pengaturan seperti ini

* * * * * /bin/my-script.sh

Dan file myscript tidak dapat dieksekusi jadi saya berlari

chmod +x my-script.sh

Segera saya mulai melihat output seperti yang diharapkan.

2
santiago arizti

Saya kira satu alasan untuk hal ini adalah direktori/home/dienkripsi dan ketika pengguna logout cron tidak dapat melakukan apa pun di direktori tersebut.

lihat: https://stackoverflow.com/a/40354269/1279002

1
theINtoy

Baris cron Anda berfungsi dengan baik di komputer saya ketika saya mengubah myusernae menjadi phunehehe. Ada beberapa cara untuk mencari tahu apa yang salah dengan sistem Anda.

Cron biasanya mengirim email ke pengguna ketika ada sesuatu yang salah. Jika Anda melihat pesan "You have mail" gunakan klien email untuk centang kotak masuk Anda . Atau, periksa di direktori home Anda, mungkin ada file bernama dead.letter di sana.

Anda dapat memeriksa /var/log/ untuk entri yang berkaitan dengan cron. Di komputer saya file log di /var/log/cron/current (memerlukan akses root).

Jika Anda memiliki akses root, Anda dapat menghentikan daemon cron dan memulainya dalam mode debug. Sebagai contoh saya akan menggunakan (ubah fcron ke nama daemon Anda):

killall fcron
fcron --foreground --debug
1
phunehehe

Kemungkinan besar, ketika cron gagal, itu menghasilkan email ke id pengguna dari pekerjaan cron di komputer itu. Jika Anda tidak memiliki MTA yang berfungsi di komputer Anda, atau Anda tidak membaca atau meneruskan surat itu di tempat lain, Anda tidak akan melihat pesan itu, bahkan jika MTA berfungsi.

Cara yang baik untuk mendapatkan kesalahan crontab Anda melalui surat adalah dengan membuat crontab Anda terlihat seperti ini:

MAILTO="[email protected]"
* * * * * echo hi >> /home/myusernae/test

Jelas, gunakan alamat email Anda daripada [email protected] Ini memberitahu cron untuk mengirim kesalahan ke alamat email Anda dan bukan ke akun lokal. Secara khusus, ini berguna jika Anda memiliki root crontab (atau fragmen crontab di /etc/cron.d) yang ingin Anda kirimkan hasilnya kepada Anda, Anda dapat menghindari spam kotak surat root atau alamat penerusan root.

1
jsbillings