Memahami Perintah-perintah Crontab Paling Lengkap

Bagus Aji Santoso 30 Oktober 2017

Memahami Perintah-perintah Crontab Paling Lengkap

Apa 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 setahun 0 0 1 1 *
  • @annually - Sama seperti @yearly
  • @monthly - Dijalankan sekali sebulan 0 0 1 * *
  • @weekly - Dijalankan sekali seminggu 0 0 * * 0
  • @daily - Dijalankan setiap hari 0 0 * * *
  • @midnight - Sama seperti @daily
  • @hourly - Dijalankan setiap jam 0 * * * *

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