Mengapa crontab saya tidak terpicu?

29

Saya biasa crontab -emenambahkan 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?

Sunting - Tanya Ubuntu punya pertanyaan bagus tentang crontab , sayangnya itu masih tidak membantu saya.

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

ripper234
sumber

Jawaban:

23

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 sampai menit berikutnya. . Karena itu, crontab dapat memakan waktu hingga dua menit untuk pertama kali. Ini mungkin yang Anda amati.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Saya kira Solaris, atau mungkin Solaris awal. Saya memiliki kebiasaan untuk membuat entri cron berjalan 3-5 menit di masa depan ketika saya menguji sebuah skrip dari entri crontab, karena saya selalu tertipu oleh perilaku ini sepanjang waktu.
Bruce Ediger
fcronmelakukan ini juga.
phunehehe
Bagaimana jika biaya "pengecekan" lebih dari beberapa menit? Akan ada cronjobs yang harus dipicu selama "pemeriksaan" yang panjang ini yang tidak dipicu.
ospider
@ospider Cek hanya membutuhkan sepersekian detik.
Gilles 'SO- berhenti menjadi jahat'
28

Sudahkah Anda menambahkan baris kosong setelah cronjob Anda ?

gelraen
sumber
Ada garis kosong setelah cronjob saya.
ripper234
4
Bukan baris kosong, tapi baris baru di akhir baris terakhir. File teks seharusnya terdiri dari urutan baris, masing-masing diakhiri oleh baris baru, sehingga file teks yang tidak kosong berakhir dengan karakter baris baru. Beberapa utilitas tidak memproses apa pun setelah baris baru terakhir dalam sebuah file.
Gilles 'SO- berhenti bersikap jahat'
1
Ini adalah pertanyaan tentang istilah, "karakter baris baru" berarti "setelah karakter ini memulai baris teks baru". Jadi 0 byte antara baris baru terakhir dan EOF juga dapat dianggap sebagai baris kosong ("baris yang berisi 0 karakter")
gelraen
10

Saya memiliki masalah yang sama - crontab yang bekerja tiba-tiba berhenti setelah saya menambahkan entri baru pada akhirnya. 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.

uniomni
sumber
5

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 juga ada klausa eksplisit untuk STDERR. Jika tidak, STDERR dapat dikirim melalui email ke pengguna (dengan asumsi bahwa email itu 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 / pesan & / 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
Stefan Lasiewski
sumber
2

Bagi saya masalahnya adalah skrip tidak dapat dieksekusi. Saya memiliki pengaturan crontab -e 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.

santiago arizti
sumber
1

Baris cron Anda berfungsi dengan baik di komputer saya ketika saya berubah myusernaemenjadi 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 memeriksa kotak masuk Anda . Atau, periksa di direktori home Anda, mungkin ada file bernama di dead.lettersana.

Anda dapat memeriksa /var/log/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. Misalnya saya akan menggunakan (ubah fcronke nama daemon Anda):

killall fcron
fcron --foreground --debug
phhehehe
sumber
Bagaimana cara mengetahui nama dasmon saya?
ripper234
@ ripper234 gunakan ps -ef | grep crondan Anda akan melihat garis untuk cron Anda. Periksa halaman manual cron untuk melihat tanda untuk debug. Kemungkinan Anda menggunakan Vixie Cron , dalam hal ini bendera debug adalah -x. Bunuh proses cron dan mulai lagi dengan bendera tambahan.
phunehehe
Juga periksa / var / log / syslog. Dalam kasus saya, ada peringatan bahwa file cron dapat ditulis kelompok.
perlakukan mod Anda dengan baik
1

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 memberi tahu 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.

jsbillings
sumber
Saya tidak tahu apakah sistem memiliki SMTP / server surat keluar yang dikonfigurasi. Kemungkinannya tidak.
ripper234
1

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

theINtoy
sumber