Mengapa pekerjaan cron.d per menit saya tidak berjalan?

33

Saya telah melemparkan banyak anak panah yang mencoba untuk mendapatkan skrip python saya untuk mengeksekusi setiap menit. Jadi saya pikir saya akan menyederhanakannya hanya dengan melakukan "hal paling sederhana yang mungkin bisa bekerja" sekali per menit (saya menjalankan debian / pengujian).

Saya membuat file baris tunggal di /etc/cron.d/perminute:

* * * * * /bin/touch /home/me/ding_dong

Dimiliki oleh root, dan dapat dieksekusi (tidak yakin apakah salah satu dari masalah itu). Dan kemudian saya lakukan:

sudo service cron reload

Dan kemudian duduk dan mulai berlari ls -ltrlagi dan lagi di direktori home saya ( /home/me). Tetapi file ding_dong saya tidak pernah muncul. Saya tahu jika saya melakukan sudo /bin/touch /home/me/ding_dong, itu muncul segera.

Jelas melewatkan sesuatu yang bodoh di sini.

Travis Griggs
sumber
3
Reload layanan daemon cron untuk menerapkan perubahan dalam cron.d biasanya tidak diperlukan karena itu memindai ulang direktori untuk file baru dan yang diperbarui setiap menit.
Josip Rodin

Jawaban:

45

Saat menambahkan konfigurasi cron di /etc/cron.d/atau di /etc/crontabAnda harus menambahkan nama pengguna di mana konteks perintah harus dijalankan, dalam contoh Anda

* * * * * root /bin/touch /home/me/ding_dong

Dan hanya sebuah petunjuk dari saya: Anda tidak harus mulai berjalan ls -ltrlagi dan lagi, cukup gunakan watch -n 5 "ls -ltr"dan itu akan menjalankan perintah setiap 5 detik (atau nilai lain dengan mengganti 5 dengan apa yang Anda inginkan).

noggerl
sumber
9
Ini membuat saya pergi ke arah yang benar. Itu adalah momen headsmack. Saya memperbaikinya, namun tetap saja tidak berhasil. Setelah membaca man cronsedikit lebih lambat, dan memberikan perhatian khusus pada DEBIAN specificbagian - bagian, saya perhatikan bahwa file-file tersebut TIDAK boleh dikelompokkan atau dituliskan lainnya. Yang saya aktifkan dalam frustrasi saya pada satu titik.
Travis Griggs
Tidak bisakah Anda juga hanya mengubah pemilik skrip menjadi root?
Geremia
Baris khusus ini membantu saya. Dari man cron: Selain itu, di Debian, cron membaca file di direktori /etc/cron.d. cron memperlakukan file dalam /etc/cron.d dengan cara yang sama dengan file / etc / crontab (mereka mengikuti format khusus file itu, yaitu mereka memasukkan bidang pengguna ). Namun, mereka tidak bergantung pada / etc / crontab: mereka tidak, misalnya, mewarisi pengaturan variabel lingkungan darinya. Perubahan ini khusus untuk Debian, lihat catatan di bawah DEBIAN SPECIFIC di bawah ini.
Harperville
man 8 cron (pada Debian) juga mengatakan bahwa file di /etc/cron.d/ hanya boleh berisi karakter alfanumerik, '-' dan '_'. Secara khusus, tidak ada titik.
mpartel
3

Untuk membuat cronpekerjaan baru , Anda harus menjalankan crontab -esebagai pengguna yang Anda inginkan menjalankan pekerjaan. Kemudian tambahkan baris yang relevan di jendela editor yang muncul:

* * * * * /bin/touch /home/me/ding_dong

Cara Anda melakukannya memerlukan format yang berbeda dan sebenarnya bukan ide yang baik. Crontab dalam /etc/cron.dmemiliki format yang sedikit berbeda, mereka memerlukan nama pengguna untuk dijalankan di bawah. Sebagai contoh:

* * * * * USERNAME /bin/touch /home/me/ding_dong

Trik yang baik (seperti yang disarankan oleh @VogonPoetLaureate) adalah untuk menangkap kesalahan standar dari pekerjaan cron Anda yang dapat membantu men-debug mereka. Sebagai contoh:

* * * * * /bin/touch /home/me/ding_dong 2>/tmp/error
terdon
sumber
6
Sama sekali tidak ada alasan untuk mengatakan bahwa cron.d adalah "bukan ide yang baik". Daemon cron akan mengirimkan keluaran cron.d stderr ke nama pengguna dengan baik, dan jika Anda ingin mengarahkannya kembali ke alamat email lain, variabel MAILTO tersedia.
Josip Rodin
@JosipRodin itu bukan ide yang baik untuk hal-hal yang tidak dijalankan oleh root dan yang diatur oleh Anda. Masuk akal untuk sysadmin pada sistem multiuser tetapi pada mesin Anda sendiri, lebih mudah untuk memiliki semuanya di crontab Anda sendiri sehingga hanya ada satu tempat untuk memeriksa dan crontab -lmendaftar semua pekerjaan cron Anda.
terdon
Itu mengasumsikan itu benar-benar hanya pekerjaan cron pribadi, yang OP tidak benar-benar jelaskan - umumnya, ada banyak aplikasi untuk pekerjaan cron pengguna yang tidak privat diatur melalui cron.d, seperti menjaga mereka semua di satu tempat meskipun faktanya Anda telah dengan baik pengguna layanan yang diasingkan, penyebaran otomatis lebih mudah, dll.
Josip Rodin
@JosipRodin benar-benar. Saya mengasumsikan sistem pribadi karena saya) sistem perusahaan di luar topik di sini dan ii) pertanyaan yang disarankan pengguna yang tidak ahli.
terdon
OK, saya kira saya tidak lagi membaca itu karena kebingungan umum antara superuser dan serverfault dan unix situs SE :)
Josip Rodin
2

Kemungkinan kesalahan di sini adalah bagaimana file baris tunggal dibuat. Dari Dokumentasi Ubuntu :

... baris memiliki lima bidang waktu dan tanggal, diikuti oleh perintah, diikuti oleh karakter baris baru .

Misalnya, cara pembuatan ini tidak berfungsi:

printf "* * * * * /bin/touch /home/me/ding_dong" > /etc/cron.d/ding_dong
okoloBasii
sumber