Memahami Perintah-perintah Crontab Paling Lengkap
Ditulis oleh
, dipublikasi pada Senin, 30 Oktober 2017 pukul 09.54Apa Itu Crontab?
Cron daemon merupakan sebuah service yang berjalan di semua distribusi Unix dan Linux. Service ini didesain khususnya untuk mengeksekusi suatu perintah diwaktu-waktu tertentu yang telah ditentukan. Tugas yang dikenal dengan istilah cronjobs ini merupakan hal mendasar yang harus dipahami setiap System Administrator. Cronjobs sangat berguna untuk mengotomatiskan suatu script sehingga mereka dapat dijalankan diwaktu-waktu tertentu.
Membuat Crontab Baru
Crontab dapat dibuat dengan mudah menggunakan perintah crontab
.
Untuk membuat atau mengubah isi crontab
user@machine:~$ crontab -e
Perintah Dasar Crontab
crontab -e
Mengubah atau membuat file crontab jika belum ada.crontab -l
Menampilkan isi file crontab.crontab -r
Menghapus file crontab.crontab -v
Menampilkan waktu terakhir mengubah isi file crontab. (Hanya tersedia dibeberapa sistem).
Crontab Parameters
# m h dom mon dow command
Baris yang dikomentari di atas menampilkan parameter tentang bagaimana crontab mendefinisikan setiap cronjob.
Daftar Parameter Crontab
- m - Minute (menit) - 0 to 59
- h - Hour (jam) - 0 to 23
- dom - Day of Month (tanggal) - 0 to 31
- mon - Month (bulan) - 0 to 12
- dow - Day of Week (nomor hari) - 0 to 7 (0 dan 7 adalah hari minggu)
Berikut ini grafik untuk mempermudah:
* * * * * perintah yang akan dieksekusi
– – – – –
| | | | |
| | | | +—– day of week (0 – 7) (Sunday=0)
| | | +——- month (1 – 12)
| | +——— day of month (1 – 31)
| +———– hour (0 – 23)
+————- min (0 – 59)
Parameter-parameter di atas memungkinkan kita untuk membuat suatu jobs yang berjalan pada waktu-waktu tertentu. Setiap parameter yang dipilih dapat mengatur details waktu eksekusi sampai ke menit. Ada karakter khusus yang dapat membuat crontab lebih fleksibel.
Karakter Khusus
Kita dapat menggunakan karakter khusus disebuah cron untuk memperbolehkan pengguna menentukan interval waktu bagi sebuah job untuk dieksekusi. Karakter khusus ini dipakai di crontab untuk mendeklarasi cronjob.
Karakter khusus: Asterisk (bintang)
Karakter Asterisk (bintang) merupakan karakter wild card yang dipakai untuk membuat sebuah job dijalankan setiap menit, setiap jam, setiap, hari, setiap bulan (tergantung posisi dimana ia ditulis, lihat grafik di atas).
Contoh:
* * * * * /home/user/script.sh
Karakter khusus: Koma
Karakter koma saat kita ingin mengeksekusi sebuah job di dua waktu atau lebih. Contoh di bawah ini misalnya, kita ingin mengeksekusi /home/user/script.sh
setiap menit ke 0, 15, dan 25.
0,15,25 * * * * /home/user/script.sh
Karakter khusus: Hyphen (-)
Karakter -
dipakai untuk memberikan jarak waktu antar eksekusi job.
0-59 0-23 * * * /home/user/script.sh
Karakter khusus: Forward Slash (/)
Karakter /
dipakai jika kita ingin memberikan interval antar eksekusi job. Pada contoh di bawah ini kita ingin agar script.sh
dieksekusi pada menit ke 0 lalu 20 kemudian 40 dan 60.
*/20 * * * * /home/user/script.sh
Contoh Crontab
Sebagian besar crontab dapat memiliki metode sendiri dalam pembuatannya dengan menggunakan wild card atau mendefinisikan sebuah jarak.
Setiap menit setiap hari
# m h dom mon dow command
* * * * * /home/user/script.sh
Atau
# m h dom mon dow command
0-59 0-23 0-31 0-12 0-7 /home/user/script.sh
Setiap 10 menit setiap hari
# m h dom mon dow command
*/10 * * * * /home/user/script.sh
Atau
# m h dom mon dow command
0-59/10 * * * * /home/user/script.sh
Atau
# m h dom mon dow command
0,10,20,30,40,50 * * * * /home/user/script.sh
Setiap 5 menit pada pukul 6 pagi dimulai pada 6:07
# m h dom mon dow command
07-59/5 06 * * * /home/user/script.sh
# Perintah ini akan berjalan pada 6:07, 6:012, 6:17, 6:22, 6:27, seterusnya sampai 6:57
Setiap hari tengah malam
# m h dom mon dow command
0 0 * * * /home/user/script.sh
Atau
# m h dom mon dow command
0 0 * * 0-7 /home/user/script.sh
Tiga kali sehari
# m h dom mon dow command
0 */8 * * * /home/user/script.sh
Atau
# m h dom mon dow command
0 0-23/8 * * * /home/user/script.sh
Atau
# m h dom mon dow command
0 0,8,16 * * * /home/user/script.sh
**Setiap weekday (Senin - Jumat) jam 6 pagi **
# m h dom mon dow command
0 06 * * 1-5 /home/user/script.sh
**Setiap weekend (Sabtu - Minggu) jam 6 pagi **
# m h dom mon dow command
0 06 * * 6,7 /home/user/script.sh
Atau
# m h dom mon dow command
0 06 * * 6-7 /home/user/script.sh
Sebulan sekali setiap tanggal 20 jam 6 pagi
# m h dom mon dow command
0 06 20 * * /home/user/script.sh
Setiap 4 hari sekali jam 6 pagi
# m h dom mon dow command
0 06 */4 * * /home/user/script.sh
Setiap 4 bulan sekali tanggal 10 jam 6 pagi
# m h dom mon dow command
0 06 10 */4 * /home/user/script.sh
Penggunaan String Khusus
Kita juga dapat menggunakan string khusus sebagai pengganti kelima parameter di atas untuk memudahkan pembacaan.
@reboot
- Dijalankan sekali setiap kali sistem dihidupkan@yearly
- Dijalankan sekali setahun0 0 1 1 *
@annually
- Sama seperti @yearly@monthly
- Dijalankan sekali sebulan0 0 1 * *
@weekly
- Dijalankan sekali seminggu0 0 * * 0
@daily
- Dijalankan setiap hari0 0 * * *
@midnight
- Sama seperti @daily@hourly
- Dijalankan setiap jam0 * * * *
Contoh Penggunaan String
Setiap jam
@hourly /home/user/script.sh
Setiap bulan
@monthly /home/user/script.sh
Membuat Log File
Untuk menyimpan output cron di sebuah file, gunakan tanda >
:
10 * * * * /usr/bin/php /www/virtual/username/script.py > /var/log/cron.log
Perintah di atas akan menimpa output sebelumnya. Jika ingin menambahkan output dibaris terakhir tanpa menimpa output sebelumnya gunakan tanda >>
:
10 * * * * /usr/bin/php /www/virtual/username/script.py >> /var/log/cron.log
Blok Output yang Terlalu Ramai
Terkadang kita memiliki script yang memiliki output sangat panjang setiap dieksekusi dan dapat memenuhi log. Kita dapat menyembunyikan pesan-pesan tersebut dengan mengirimkan output-nya ke "/dev/null".
# MAILTO=""
MAILTO=email@example.com
30 11 * * * /your/directory/whatever.py >/dev/null 2>&1
Apa maksud 2>&1 ?
Disini, Descriptor 1 artinya standard output (stdout) dan descriptor 2 artinya standard error (stderr).
echo test > afile.txt
... akan me-redirect stdout ke sebuah file bernama afile.txt
. Sama dengan:
echo test 1> afile.txt
Untuk me-redirect stderr kita akan menulis:
echo test 2> afile.txt
& adalah sintaks yang dipakai untuk me-redirect suatu aliran data ke descriptor lain - 0 untuk stdin. 1 untuk stdout. 2 untuk stderr.
Kita dapat me-redirect stdout ke stderr dengan melakukan:
echo test 1>&2 # or echo test >&2
Atau sebaliknya:
echo test 2>&1
Jadi singkatnya, 2> artinya kita ingin mengalirkan suatu stream stderr ke stdout (&1).
Executable Script
10 * * * * /usr/bin/php /www/virtual/username/hello.php
Saat sebuah script perlu dijalankan menggunakan aplikasi khusus, kita dapat menentukan perintah yang mengeksekusinya di depan script. Cara lainnya ialah menggunakan shebang yaitu dengan menambah #!/usr/local/bin/php
di bagian paling atas suatu file:
#!/usr/local/bin/php
<?php
echo "hello world\n";
// ...
?>
Lalu pastikan script di atas memiliki ijin untuk dieksekusi (chmodnya 755).
chmod 755 hello.php
./hello.php
Crontab sebelumnya dapat lebih singkat:
10 * * * * /www/virtual/username/hello.php
Apa maksud tanda #!
?
Setiap tanda shebang (#!) di script manampun memberikan kemampuaan script tersebut untuk dieksekusi layaknya aplikasi standalone tanpa perlu menuliskan python atau php di depannya seperti saat kita menuliskan di terminal. Contohnya adalah:
#!/usr/bin/env python
#!/usr/bin/env python
biasanya mengarah ke Python 2.7.x, jika ingin menggunakan Python 3.x, atau yang terbaru, gunakan:
#!/usr/bin/env python3
Menjalankan beberapa script bersamaan
Kita dapat menggunakan tanda "&" untuk menjalankannya secara pararel (sekaligus) atau tanda "&&" untuk menjalankannya satu persatu.
# script.sh & script2.sh & script.sh
Diterjemahkan dari The Ultimate Crontab Cheatsheet oleh Akul Megra
Tidak ada komentar:
Posting Komentar