Panduan Cron Gentoo Linux
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 |
* * * * * /bin/false
35 1 4 * mon-wed /bin/false
25 22 2 3 * /bin/true
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
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
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!
Isi dokumen ini dilisensikan dengan lisensi Creative Commons -
Attribution / Share Alike.
|