Gentoo Logo

Panduan Cron Gentoo Linux

Daftar Isi:

1.  Dasar-dasar Cron

Apa yang dilakukan oleh cron

Cron merupakan sebuah daemon yang menjalankan tugas yang telah dijadwalkan berdasarkan input dari perintah crontab. Cron menyelesaikan tugas ini dengan membangunkan dirinya setiap menit dan memeriksa apakah ada cron-job yang harus dijalankannya berdasarkan crontab user.

Catatan: Ingatlah bahwa crontab adalah nama untuk daftar cron-job dan nama dari perintah untuk mengedit daftar tersebut.

Cron de facto

Teradapat beberapa implementasi cron yang bisa anda pilih di Portage. Kesemuanya menyediakan antarmuka yang mirip, dengan menggunakan perintah crontab atau yang semacamnya. Terdapat juga utilitas terkait yang bernama Anacron yang ditujukan untuk bekerja bersama-sama dengan cron pada sistem yang tidak selalu menyala.

Perlu diketahui juga bahwa semua paket cron yang tersedia bergantung kepada paket sys-process/cronbase. Paket ini secara teknis tidak dibutuhkan oleh paket cron manapun, tetapi menyediakan fungsionalitas mirip cron yang mungkin disukai oleh semua user.

Sebelum kita mulai bekerja dengan cron, anda harus memilih implementasi mana yang ingin anda gunakan. Untuk membantu anda, penulis telah mengumpulkan informasi tentang masing-masing implementasi di bawah ini.

2.  Cron mana yang tepat untuk anda?

Vixie cron

Vixie cron merupakan implementasi penuh fitur berbasis SysV cron. Setiap user memiliki crontab-nya masing-masing dan boleh menentukan variabel lingkungan di dalam crontab tersebut. Tidak seperti varian cron yang lain, cron ini juga menawarkan dukungan untuk SeLinux dan PAM. Cron ini mendukung arsitektur lebih sedikit dari Dcron, tetapi lebih banyak dari Fcron.

Fitur-fitur sys-process/vixie-cron:

  • Dukungan untuk SELinux
  • Dukungan untuk PAM /etc/security/limits.conf
  • Setting variabel lingkungan di crontab (PATH, SHELL, HOME, etc.)
  • Setiap user boleh memiliki crontab-nya sendiri, akses dikendalikan oleh cron.allow dan cron.deny

Dillon's Cron

Dcron diciptakan untuk menjadi implementasi cron yang sederhana, elegan, dan aman. Implementasi ini tidak mengizinkan spesifikasi variabel lingkungan di crontab dan semua cron-job dijalankan dari /bin/sh. Seperti Vixie cron, setiap user boleh memiliki crontab-nya sendiri.

Fitur-fitur sys-process/dcron:

  • Kencang, sederhana dan bebas dari fitur-fitur yang tidak diperlukan
  • Akses ke crontab terbatas pada grup cron

Fcron

Fcron diciptakan untuk menjadi pengganti Vixie cron dan Anacron. Dirancang untuk bekerja pada sistem yang tidak selalu dinyalakan dan memiliki beberapa fitur tambahan. Memiliki penyekat startup job, kendali serialisasi job, kemampuan untuk menetapkan nilai "nice" ke job dan kemampuan untuk menjadwalkan job agar dijalankan ketika sistem startup. Bukalah website fcron untuk info lebih lanjut.

Fitur-fitur sys-process/fcron:

  • Dirancang untuk bekerja pada sistem yang tidak selalu dinyalakan, yakni dapat mengerjakan tugas setelah restart jika tugas tersebut terlewatkan.
  • Setting variabel lingkungan dan banyak opsi-opsi lain di crontab
  • Setiap user dapat memiliki crontab-nya sendiri, akses dikendalikan oleh cron.allow dan cron.deny
  • Sintaks crontab yang disempurnakan dengan dukungan untuk banyak fitur-fitur baru

bcron

bcron adalah sistem cron yang dirancang dengan memperhatikan keamanan. Untuk itu, sistemnya dibagi menjadi beberapa beberapa program terpisah, masing-masing bertanggung jawab akan tugasnya sendiri, dengan komunikasi yang sangat terkendali. Antarmuka penggunanya mirip dengan yang lainnya (seperti vixie-cron), tetapi isinya sangat jauh berbeda. Untuk mendapatkan informasi yang lebih lengkap, kunjungilah situs bcron di http://untroubled.org/bcron/.

Fitur-fitur sys-process/bcron:

  • Sebagai pengganti vixie-cron
  • Desain multiproses
  • Dukungan daylight savings time

Anacron

Anacron bukanlah merupakan sebuah daemon cron, tetapi merupakan sesuatu yang biasanya bekerja sama dengan daemon cron. Anacron mengeksekusi perintah pada interval yang ditentukan dengan hitungan hari dan tidak menganggap bahwa sistem selalu menyala; ia akan menjalankan tugas-tugas yang terlewatkan ketika sistem sedang dimatikan. Anacron biasanya bergantung pada daemon cron untuk menjalankannya setiap hari.

3.  Menggunakan cron

Instalasi

Pilihlah implementasi cron yang paling anda sukai, kemudian emerge.

Daftar Kode 3.1: Instalasi cron

# emerge dcron
# /etc/init.d/dcron start
# rc-update add dcron default

Sebagai pilihan, jika anda telah menginstal Fcron, anda juga mungkin ingin menginstal Anacron.

Daftar Kode 3.2: Instalasi anacron

# emerge anacron
# /etc/init.d/anacron start
# rc-update add anacron default

Crontab sistem

Pesan-pesan setelah instalasi dari beberapa paket cron ini memerintahkan anda untuk menjalankan crontab /etc/crontab. File /etc/crontab adalah crontab sistem anda. Sebuah instalasi cron dapat menggunakannya bersama-sama dengan sys-process/cronbase untuk menjalankan skrip-skrip di dalam /etc/cron.{daily,hourly,weekly,monthly}. Catat bahwa Vixie-cron menjadwalkan tugas-tugasnya di /etc/crontab secara otomatis. Pengguna Dcron dan Fcron perlu menjalankan crontab /etc/crontab setiap kali mengadakan perubahan pada /etc/crontab.

Catat pula bahwa tugas-tugas yang dijadwalkan di crontab sistem mungkin tidak akan ditampilkan di daftar cron-job yang ditampilkan oleh crontab -l.

Tentunya, anda dapat memilih untuk tidak menggunakan crontab sistem sama sekali. Jika anda memilih Dcron atau Fcron, jangan menjalankan crontab /etc/crontab. Jika anda memilih vixie-cron atau bcron, anda perlu memberi tanda komentar pada semua baris di file /etc/crontab.

Daftar Kode 3.3: Memberi tanda komentar pada semua baris di /etc/crontab

# sed -i -e "s/^/#/" /etc/crontab

Memberikan akses ke cron pada user yang terpercaya

Jika anda ingin agar user selain root untuk memiliki akses ke daemon cron, anda perlu membaca seksi ini. Jika tidak, anda boleh melanjutkan ke seksi selanjutnya, menjadwalkan cron-job.

Catatan: Memberikan akses ke crontab pada user lain tidak akan mengizinkannya untuk menjalankan cron-job sebagai root. Jika anda ingin agar user dapat mengedit crontab root, anda perlu melihat sudo. Silakan baca Panduan Sudo(ers) Gentoo kami untuk info selanjutnya.

Apapun paket cron yang anda gunakan, jika anda ingin mengizinkan user untuk mengunakan crontab, pertama-tama ia harus menjadi anggota grup cron. Sebagai contoh, jika anda ingin menambahkan user wepy ke grup cron, jalankan:

Daftar Kode 3.4: Menambahkan user ke grup cron

# gpasswd -a wepy cron

Catatan: Ketika menambahkan user ke grup cron, pastikan agar user tersebut logout, lalu login kembali agar perubahan grup berpengaruh.

Jika anda menggunakan Dcron, hanya itu saja yang anda butuhkan untuk memberikan akses ke crontab. Pengguna Dcron boleh melanjutkan ke seksi selanjutnya, menjadwalkan cron-job, pengguna cron lain harus terus membaca.

Jika anda menggunakan Fcron, anda perlu mengedit /etc/fcron/fcron.deny dan /etc/fcron/fcron.allow. cara paling aman adalah dengan tidak mengizinkan semua user di /etc/fcron/fcron.deny, lalu secara eksplisit mengizinkan user di /etc/fcron/fcron.allow.

Penting: Jika /etc/fcron/fcron.allow atau /etc/fcron/fcron.deny tidak ada, semua user di grup cron akan diizinkan untuk menggunakan. fcron memiliki default fcron.allow yang mengizinkan semua user di grup cron untuk mengakses fcrontab.

Daftar Kode 3.5: Perizinan di fcron.deny

all

Sekarang, katakanlah kita memiliki user bernama wepy yang perlu menjadwalkan cron-job-nya sendiri. Kita akan menambahkannya ke /etc/fcron/fcron.allow sebagai berikut:

Daftar Kode 3.6: Perizinan di fcron.allow

wepy

Jika anda memilih Vixie cron, anda mungkin hanya perlu mengedit /etc/cron.allow.

Penting: Perlu dicatat bahwa jika hanya terdapat /etc/cron.allow, maka hanya user grup cron yang terdaftar di sana yang akan memiliki akses. Tetapi jika hanya terdapat file /etc/cron.deny kosong, maka semua user grup cron akan diizinkan! Jangan membiarkan file /etc/cron.deny Jika anda tidak memiliki file /etc/cron.allow.

Sebagai contoh, jika anda ingin memberikan akses ke user wepy, anda perlu menambahkannya ke /etc/cron.allow sebagai berikut:

Daftar Kode 3.7: Perizinan di /etc/cron.allow

wepy

Menjadwalkan cron-jobs

Proses pengeditan crontab berbeda untuk setiap paket, tetapi semuanya mendukung kumpulan perintah dasar yang sama: menambahkan dan menggantikan crontab, mengedit crontab, menghapus crontab, dan menampilkan daftar cron-job di cron-tab. Daftar berikut ini menunjukkan kepada anda cara menjalankan perintah-perintah tersebut untuk masing-masing paket.

Versi Edit crontab Menghapus crontab Crontab baru Menampilkan cron-job
dcron crontab -e crontab -d [user] crontab file crontab -l
fcron fcrontab -e fcrontab -r [user] fcrontab file fcrontab -l
vixie-cron & dcron crontab -e crontab -r -u [user] crontab file crontab -l

Catatan: Ketika menggunakan perintah menghapus, jika tidak ada argumen yang diberikan, semua crontab user akan dihapus.

Catatan: Fcron juga memiliki symlink dari crontab ke fcrontab.

Tetapi sebelum kita menggunakan salah satu dari perintah-perintah ini, pertama kita perlu memahami crontab itu sendiri. Setiap baris di crontab perlu menentukan lima kolom dengan urutan ini: menit (0-59), jam (0-23), hari dari bulan (1-31), bulan (1-12), dan hari dari pekan (0-1, Senin adalah 1 dan Minggu adalah 0 dan 7). Hari-hari dari pekan dan bulan dapat ditulis dengan singkatan tiga huruf seperti mon, tue, jan, feb, dll. Setiap kolom juga dapat menentukan jarak nilai (mis. 1-5 atau mon-fri), nilai yang dipisahkan dengan koma (mis. 1,2,3 atau mon,tue,wed) atau nilai jarak di dalam sebuah langkah (mis. 1-6/2 sebagai 1,3,5).

Kelihatannya agak membingungkan, tetapi dengan sedikit contoh, anda akan melihat bahwa itu sesungguhnya tidak terlalu membingungkan seperti kelihatannya.

Daftar Kode 3.8: Contoh-contoh

# Jalankan /bin/false setiap menit selama satu tahun
*     *     *     *     *        /bin/false

# Jalankan /bin/false pada jam 1:35 di hari senin, selasa, rabu dan hari ke-4 pada setiap bulan
35    1     4     *     mon-wed  /bin/false

# Jalankan /bin/true pada jam 22:25 di hari ke-2 bulan Maret
25    22    2     3     *        /bin/true

# Jalankan /bin/false pada jam 2:00 setiap Senin, Rabu dan Jum'at
0     2     *     *     1-5/2    /bin/false

Catatan: Perhatikan cara anda menentukan hari-hari tertentu dari setiap pekan dan hari-hari dari setiap bulan sebelum dikombinasikan. Jika anda hanya memiliki satu tanda * dari keduanya, yang lainnya akan didahulukan, sedangkan tanda * untuk keduanya berarti setiap hari.

Untuk menguji apa yang baru saja kita peljari, mari kita lalui langkah-langkah tersebut dengan benar-benar memasukkan beberapa cron-job. Pertama, ciptakan sebuah file yang bernama crons.cron dan buatlah seperti berikut ini:

Daftar Kode 3.9: Mengedit crons.cron

$ nano crons.cron
#Menit Jam    Hari   Bulan   Hari dari pekan
10     3      1      1       *       /bin/echo "I don't really like cron"
30     16     *      1,2     *       /bin/echo "I like cron a little"
*      *      *      1-12/2  *       /bin/echo "I really like cron"

Sekarang kita dapat menambahkan crontab tersebut ke sistem dengan "new command" dari tabel di atas.

Daftar Kode 3.10: Crontab baru

# crontab crons.cron

Catatan: Anda tidak akan dapat melihat keluaran dari perintah-perintah echo di atas kecuali jika anda menggunakan redirection.

Untuk memverifikasi cron-job yang telah anda jadwalkan, kita akan menggunakan list command dari tabel di atas.

Daftar Kode 3.11: Menampilkan cron-job

# crontab -l

Anda seharusnya dapat melihat daftar isi dari crons.cron, jika tidak, anda mungkin telah mengetikkan perintah yang salah ketika memasukkan crontab baru anda.

Crontab ini seharusnya mengeluarkan "I really like cron" setiap menit dalam setiap hari dalam setiap bulan. Tentunya anda hanya akan melakukannya jika anda memang benar-benar menyukai cron. Crontab ini juga akan mengeluarkan "I like cron a little" pada jam 16:30 setiap hari di bulan Januari dan Februari. Ia juga akan mengeluarkan "I don't really like cron" pada jam 3:10 di hari pertama bulan Januari.

Jika anda menggunakan Anacron, anda harus terus membaca seksi ini. Jika tidak, silakan melanjutkan ke seksi selanjutnya yaitu mengedit crontab.

Pengguna Anacronperlu mengedit /etc/anacrontab. File ini memiliki empat kolom: jumlah hari di antara setiap kali perintah dijalankan, penundaan dalam hitungan menit setelah dijalankan, nama job, dan perintah yang akan dijalankan.

Sebagai contoh, agar echo "I like anacron" dijalankan setiap 5 hari, 10 menit setelah Anacron dijalankan, anda perlu memasukkan:

Daftar Kode 3.12: /etc/anacrontab

5 10 wasting-time /bin/echo "I like anacron"

Anacron ada setelah semua tugas di anacrontab dijalankan, jadi jika kita ingin agar anacron memeriksa tugas-tugas ini setiap hari, kita perlu menggunakan cron. Anda akan mengetahui caranya pada instruksi-instruksi di seksi selanjutnya.

Mengedit crontab

Tetapi mari kita lebih realistis, anda tidak ingin sistem anda menyatakan betapa anda menyukai cron setiap menit. Sebagai langkah maju, mari kita buang crontab dengan menggunakan remove command dari tabel di atas. Kita juga akan melihat cron-job setelahnya, untuk memastikan agar semuanya telah benar.

Daftar Kode 3.13: Menghapus crontab

# crontab -d
# crontab -l

Anda seharusnya tidak melihat cron-job dari output perintah crontab -l. Jika anda masih melihatnya, berarti kita telah gagal menghapus crontab, dan anda harus memastikan bahwa anda telah menggunakan remove command yang benar dari paket cron anda.

Sekarang setelah kita memiliki file yang bersih, marilah kita meletakkan sesuatu yang bermanfaat di crontab root. Kebanyakan pengguna ingin menjalankan updatedb setiap minggu untuk memastikan agar slocate bekerja dengan benar. Untuk menambahkannya ke crontab anda, pertama mari kita edit lagi crons.cron agar terlihat seperti berikut ini:

Daftar Kode 3.14: Sebuah crontab nyata

22 2 * * 1    /usr/bin/updatedb

Baris tersebut akan memerintahkan crontab untuk menjalankan updatedb pada jam 2:22 A.M. di hari Senin setiap pekan. Anda sekarang perlu memasukkan crontab dengan new command yang benar dari tabel di atas, lalu periksa kembali daftar tersebut.

Daftar Kode 3.15: Menampilkan cron-job

# crontab crons.cron
# crontab -l

Sekarang anggaplah anda juga ingin menambahkan emerge --sync ke jadwal harian anda. Anda dapat melakukannya dengan mengedit crons.cron kemudian menggunakan crontab crons.cron persis seperti yang telah kita lakukan tadi, atau anda dapat menggunakan edit command yang benar dari tabel di atas. Dengan begini anda memiliki satu cara untuk mengedit crontab user anda dengan mudah, tanpa bergantung pada file lain seperti crons.cron.

Daftar Kode 3.16: Mengedit crontab secara langsung

# crontab -e

Perintah tersebut akan membuka crontab user anda dengan sebuah editor. Kita ingin menjalankan emerge --sync setiap jam 6:30 A.M., agar terlihat seperti berikut ini:

Daftar Kode 3.17: Sebuah crontab nyata

22 2 * * 1    /usr/bin/updatedb
30 6 * * *    /usr/bin/emerge --sync
(jika anda menggunakan anacron, tambahkan baris ini)
30 7 * * *    /usr/sbin/anacron -s

Lagi-lagi, periksalah daftar cron-job seperti yang telah kita lakukan pada contoh sebelumnya untuk memastikan agar tugas-tugas tadi telah dijadwalkan. Jika semuanya telah terdaftar, maka anda telah berhasil.

4.  Menggunakan cronbase

Seperti yang telah dijelaskan sebelumnya, semua paket cron yang tersedia bergantung pada sys-process/cronbase. Paket cronbase menciptakan /etc/cron.{hourly,daily,weekly,monthly}, dan sebuah skrip bernama run-crons. Anda mungkin telah memperhatikan bahwa /etc/crontab default berisi seperti berikut ini:

Daftar Kode 4.1: Crontab sistem default

*/15 * * * *     test -x /usr/sbin/run-crons && /usr/sbin/run-crons
0  *  * * *      rm -f /var/spool/cron/lastrun/cron.hourly
0  3  * * *      rm -f /var/spool/cron/lastrun/cron.daily
15 4  * * 6      rm -f /var/spool/cron/lastrun/cron.weekly
30 5  1 * *      rm -f /var/spool/cron/lastrun/cron.monthly

Agar tidak terlalu bertele-tele, kita boleh saja mengasumsikan bahwa perintah-perintah ini akan menjalankan skrip anda setiap jam, hari, pekan, dan bulan. Metode penjadwalan cron-job ini memiliki beberapa keutamaan:

  • Semua skrip akan dijalankan walaupun komputer anda telah dimatikan ketika skrip-skrip tersebut dijadwalkan untuk dijalankan
  • Kemudahan bagi para pengurus paket untuk meletakkan skrip-skrip pada tempat-tempat yang telah ditentukan tadi
  • Anda mengetahui dengan pasti di mana cron-job dan crontab anda berada, jadi memudahkan anda untuk mem-backup dan mengembalikan bagian dari sistem anda

Catatan: Lagi-lagi, anda perlu mengetahui bahwa Vixie cron akan secara otomatis membaca /etc/crontab, sedangkan dcron dan fcron tidak. Silakan baca bagian Crontab sistem untuk lebih memperdalam masalah ini.

5.  Catatan Akhir

Pemecahan masalah

Jika anda mengalami masalah ketika mengatur cron, anda mungkin perlu memeriksa daftar singkat berikut ini.

  • Apakah cron telah berjalan?
    Jalankan ps ax | grep cron dan pastikan agar cron tercantum!
  • Apakah cron bekerja?
    Cobalah: * * * * * /bin/echo "foobar" >> /file_yang_anda_miliki dan pastikan agar bekerja dengan benar bekerja
  • Apakah perintah anda bekerja?
    Cobalah: * * * * * /bin/foobar > /file_yang_anda_miliki 2>&1 lalu cari pesan error pada file tersebut
  • Dapatkah cron menjalankan tugas anda?
    Carilah error di log cron, biasanya ada di /var/log/cron.log atau /var/log/messages
  • Apakah ada file dead.letter?
    cron biasanya mengirimkan email anda ketika ada masalah, periksa email anda juga carilah file ~/dead.letter.

Ingat, setiap paket cron berbeda, begitu juga dengan fitur-fiturnya, Pastikan untuk membaca manual crontab, fcrontab, atau anacrontab, tergantung apa yang anda gunakan.

Semoga berhasil!



Print

Diperbarui 26 Januari 2008

Versi asli dari dokumen ini terakhir diupdate 14 November 2010

Rangkuman: Panduan ini menjelaskan cara men-setup dan menggunakan cron.

Eric Brown
Author

Xavier Neys
Editor

Joshua Saddler
Editor

Dzikri Aziz
Translator

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.