Penjadwalan pekerjaan menggunakan crontab, apa yang akan terjadi ketika komputer dimatikan selama waktu itu?

85

Saya menjadwalkan beberapa tugas menggunakan crontab.

Apa yang akan terjadi jika komputer saya dimatikan atau dimatikan saat cron dijadwalkan melakukan sesuatu?

Apakah setiap pekerjaan cron yang terlewat berjalan setelah komputer dihidupkan, atau apakah pekerjaan yang terlewatkan untuk hari itu diabaikan? Jika pekerjaan tidak terjawab tidak dilanjutkan, apakah ada cara untuk mengkonfigurasi cron sehingga menjalankan tugas yang tidak terjawab setelah komputer dihidupkan kembali?

seg.server.fault
sumber
3
Saya mencoba mencari tutorial anacron di web tetapi tidak bisa menemukan yang bagus. Melihat ke halaman manual juga tidak banyak membantu saya. Bagaimana saya bisa mengubah crontab yang sudah ada sehingga diubah menjadi anacron ?? Atau tutorial apa pun dalam hal ini akan sangat membantu
seg.server.fault
1
Saya telah mengedit jawaban saya untuk memasukkan beberapa contoh. Saya harap itu membantu!
jeff

Jawaban:

70

Ketika komputer Anda dimatikan (atau cron daemon tidak berjalan), tugas cron tidak akan dimulai.

Jika Anda memiliki pekerjaan yang ingin Anda jalankan setelah fakta pada saat-saat ketika komputer dimatikan, gunakan anacron. Diinstal secara default, lihat "man anacron", "man anacrontab", atau file / etc / anacrontab untuk info lebih lanjut.

Ubuntu menggunakan anacron secara default untuk entri crontab di:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

meninggalkan crontab yang tersisa untuk ditangani oleh daemon cron utama, khususnya:

/etc/crontab
/etc/cron.d
/var/spool/cron

CATATAN

Anacron sendiri tidak berjalan sebagai daemon, tetapi bergantung pada skrip startup sistem dan cron sendiri untuk dijalankan.

Pada kotak Ubuntu 8.04 yang saya cari, /etc/init.d/anacron dijalankan saat boot, dan sekali lagi dengan cron setiap pagi pukul 07:30.

README di /usr/share/doc/anacron/README.gz memiliki info sedikit lebih banyak daripada yang terkandung dalam manual.

CONTOH

Untuk pekerjaan "harian", "mingguan", "bulanan" yang sederhana, letakkan salinan atau symlink ke skrip di salah satu direktori /etc/cron.{daily|weekly|monthly} di atas. Anacron akan menjalankannya setiap hari / mingguan / bulanan, dan jika komputer Anda mati pada hari skrip "mingguan" biasanya berjalan, ia akan menjalankannya saat komputer dihidupkan lagi.

Sebagai contoh lain, dengan asumsi Anda memiliki skrip di sini: /usr/local/sbin/maint.sh

Dan Anda ingin menjalankannya setiap tiga hari, entri standar di / etc / crontab akan terlihat seperti ini:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

Jika komputer Anda tidak aktif pukul 00:00 pada tanggal 3 bulan itu, pekerjaan itu tidak akan berjalan hingga tanggal 6.

Agar pekerjaan dijalankan alih-alih pada tanggal 4 saat komputer mati dan "melewatkan" proses pada tanggal 3, Anda akan menggunakan ini di / etc / anacrontab (jangan lupa untuk menghapus baris dari / etc / crontab):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

"Penundaan" dari "5" di atas berarti bahwa anacron akan menunggu selama 5 menit sebelum menjalankan pekerjaan ini. Idenya adalah untuk mencegah anacron menembakkan sesuatu dengan segera pada saat boot.

jeff
sumber
5
Secara default Ubuntu menggunakan anacron.
3dinfluence
1
terima kasih, 3dincluence - jawaban yang disesuaikan untuk menunjukkan crontab mana yang ditangani oleh anacron di setip ubuntu default.
jeff
2
jika Anda meletakkan skrip di /etc/cron.*/ daripada memiliki entri crontab sendiri, jangan memiliki "." dalam nama file skrip. debian dan ubuntu menggunakan run-parts untuk menjalankan skrip tersebut, dan secara default run-parts akan mengabaikan file dengan a. dalam nama file - ini agar tidak menjalankan skrip versi .dpkg-old dan .dpkg-dist yang diganti namanya dari pemutakhiran. jadi panggil skrip atau symlink "maint" daripada "maint.sh".
cas
OpenSUSE menggunakan cronie secara default mulai 11.2 dan seterusnya (hingga Tumbleweed / Leap 42.2 saat ini). Untuk menggunakan anacron, instal cronie-anacronpaket.
palswim
13

Ini tergantung pada penjadwal cron yang Anda gunakan. Daemon vanilla cron dasar tidak akan menjalankan tugas yang tidak terjawab karena downtime sistem. Namun, ada penjadwal cron lain yang dirancang khusus untuk situasi ini yang akan melakukan ini untuk Anda. Dua contoh yang paling umum adalah anacron dan fcron .

Tyler McHenry
sumber
5

Tugas yang dijadwalkan saat komputer mati tidak akan berjalan ketika komputer menyala kembali

Alan H
sumber
2

Jika Anda mematikan ketika pekerjaan cron berjalan, sistem dimatikan dan pekerjaan cron berhenti (atau tidak berjalan).

Salah satu alternatif yang bisa Anda periksa adalah anacron.

KPWINC
sumber
2

Sangat tergantung pada cron deamon yang Anda jalankan. Vixie-cron hanya akan melewatkan cronjobs yang tidak terjawab. fcron akan menjalankan crons yang terlewat sesegera mungkin. IIRC juga didasarkan pada vixie-cron, jadi jika itu yang Anda cari, Anda mungkin ingin memeriksa fcron.

gregf
sumber