Crontab tidak pernah berjalan saat di /etc/cron.d

32

Inilah yang saya lakukan pada Debian Jessie:

  • instal cron via apt-get install cron
  • masukkan backup_crontabfile/etc/cron.d/

Namun tugas itu tidak pernah berjalan.

Berikut ini beberapa output:

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Apakah ada sesuatu yang harus dilakukan untuk mengaktifkan crontab tertentu, atau mengaktifkan "layanan" cron itu sendiri?

Jivan
sumber
4
Bagaimana jika itu berjalan dan gagal dengan kesalahan yang tidak Anda lihat karena Anda mengarahkan semua output ke / dev / null? :)
tink
@tink, mungkinkah menambahkan output ke akhir file?
Jivan
2
tentu saja; 0,15,30,45 * * * * /backup.sh >> / tmp / testing_cron.out 2> & 1
tink
@ Jivan, hanya sebuah catatan kecil: ls /etc/cron.dsetara dengan cd /etc/cron.d && lsdalam hal output. Satu-satunya perbedaan adalah direktori kerja tidak akan berubah.
Drew Chapin

Jawaban:

49

File-file yang /etc/cron.dperlu juga mencantumkan pengguna yang menjalankan tugas itu.

yaitu

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

Anda juga harus memastikan izin dan pemilik: grup diatur dengan benar ( -rw-r--r--dan dimiliki oleh root:root)

Stephen Harris
sumber
16
crontab -lmelaporkan entri cron di /var/spool/cron/crontabs/- yaitu crontab per pengguna . /etc/cron.dfile adalah sistem crontab dan tidak dilaporkan oleh crontab -l.
Stephen Harris
5
Sebenarnya saya menyebutkan bahwa itu tidak berfungsi tetapi saya baru sadar bahwa itu setelah menambahkan rootdalam file - hanya crontab -ltidak menyebutkannya, seperti yang Anda jelaskan mengapa - terima kasih atas bantuan Anda
Jivan
9
tampaknya juga nama file memiliki peran. Dalam kasus saya, saya telah menambahkan etc/cron.dfile dengan titik di tengah nama dan pekerjaan itu tidak pernah dieksekusi sampai saya menamainya kembali
pic
20
masalah yang sama di sini, tanda "-" dalam nama file, mengubahnya menjadi garis bawah "_" menyelesaikan masalah, pekerjaan segera berjalan.
Rob
1
Saya juga punya tanda hubung ... apa .... kenapa ?! Bagaimanapun, terima kasih @Rob
Nikolay Dimitrov
8

Hal lain yang saya amati adalah bahwa file dalam /etc/cron.dtidak dapat memiliki ekstensi. Dalam kasus khusus saya, saya memiliki tautan simbolis:

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

Pembatasan nama file didokumentasikan pada halaman manual run-bagian: http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html , seseorang dapat melewati opsi --regex untuk mengganti format file.

Namun perilaku cron default tetap tanpa ekstensi, lihat komentar di bawah: https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022

rodrigo-silveira
sumber
Man, kamu menyelamatkan hariku!
elboletaire
2
Ini benar pada Ubuntu (mungkin pada semua distro yang diturunkan dari Debian). Di Amazon Linux (dan mungkin pada semua distro yang berasal dari Redhat), Anda dapat memiliki titik pada nama file. Terima kasih, Unix.SE.
Law29
Saya baru saja memeriksa Debian murni, dan titik-titik tidak berfungsi di sana. Tanda hubung berfungsi (tidak seperti apa yang dikatakan komentar di atas).
Law29
4

Saya pikir Anda mungkin hanya kehilangan satu baris kosong yang diperlukan dari akhir file cron Anda. Saya memiliki masalah yang sama, tetapi setelah memeriksa semua yang tercantum di sini (izin pengguna, nama file, versi cron dll), saya menyadari bahwa saya tidak memiliki jeda baris setelah entri terakhir di saya /etc/cron.d/own_crondan yang menyebabkan seluruh file diabaikan.

slac1024
sumber
2

Jika Anda satu-satunya pengguna di komputer ini, Anda mungkin ingin menggunakannya saja crontab -e. Anda akan diminta untuk memilih editor saat pertama kali menjalankan perintah. Kemudian Anda dapat menambahkan ini ke dalamnya:

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Jika Anda mengubah ke akun pengguna normal, Anda harus menggunakan sudo crontab -euntuk mengkonfigurasi skrip yang ingin Anda jalankan root.

crontab -lhanya menampilkan crontab saat ini, setelah Anda mengaturnya menggunakan crontab -e. Jika Anda memiliki file cron di /etc/cron.d/, itu tidak akan ditampilkan bersama crontab -l.

Anda juga akan perlu untuk memverifikasi bahwa script Anda executable dengan: chmod +x /backup.sh.

clk
sumber
1
terima kasih - dalam hal ini crontab diatur dalam konteks Dockerfilejadi saya tidak bisa melakukannya crontab -e- tapi ini informasi yang berguna
Jivan
2

Untuk Cron dari * bian distro (seperti Raspbian), Anda perlu mengaktifkan -lparameter daemon Cron. Itu disarankan untuk dilakukan menggunakan /etc/default/cronfile config, mengaktifkan EXTRA_OPTS.

orang yg mudah tersinggung
sumber
Ini dibatalkan, tetapi benar dalam beberapa kasus, meskipun tidak dijelaskan. Pada distro berbasis Debian -lopsi ke daemon cron mengotorisasi set nama file yang diperluas dalam /etc/cron.ddirektori, jadi jika file diabaikan secara diam-diam karena ada titik di dalamnya, maka "menambahkan -l" atau "menghapus titik" akan memperbaiki masalah.
Law29
1

Periksa versi Anda cron.

Tampaknya jika Anda menggunakan Dillon's crond, Anda tidak perlu pengguna dalam /etc/cron.dentri.

Saya menemukan ini setelah hampir menarik rambut saya yang tersisa.

Saya memiliki beberapa entri yang telah dijatuhkan /etc/cron.doleh berbagai pemasangan. Setelah beberapa penyelidikan, saya menemukan salah satu dari mereka bekerja Itu tidak memiliki pengguna. Jadi saya mengambil pengguna dari yang lain. Dan mereka mulai bekerja.

James Nelson
sumber