() translation by (you can also view the original English article)
Cron Jobs digunakan untuk menjadwalkan tugas untuk dijalankan di server. Mereka paling sering digunakan untuk mengotomatisasi pemeliharaan atau administrasi sistem. Namun, mereka juga relevan dengan pengembangan aplikasi web. Ada banyak situasi ketika aplikasi web mungkin memerlukan tugas-tugas tertentu untuk berjalan secara berkala. Hari ini kita akan menjelajahi dasar-dasar Cron Jobs.
Definisi
Pertama mari kita membiasakan diri dengan istilah yang terkait dengan subjek ini.
"Cron" adalah penjadwal pekerjaan berbasis waktu dalam sistem operasi seperti Unix (Linux, FreeBSD, Mac OS dll ...). Dan pekerjaan atau tugas ini disebut sebagai "Cron Jobs".
Ada cron "daemon" yang berjalan pada sistem ini. Daemon adalah program yang berjalan setiap saat dibalik layar, biasanya dimulai oleh sistem. Daemon cron ini bertanggung jawab untuk meluncurkan tugas cron ini sesuai jadwal.
Jadwal berada di file konfigurasi yang bernama "crontab". Di situlah semua tugas dan pengatur waktu mereka terdaftar.
Mengapa menggunakan Cron Jobs?
Admin server telah menggunakan cron Job untuk waktu yang lama. Tapi karena target audiens dari artikel ini adalah web developer, mari kita melihat beberapa kasus penggunaan cron pekerjaan yang relevan di daerah ini:
- Jika Anda memiliki situs keanggotaan, mana account memiliki tanggal kadaluarsa, Anda dapat menjadwalkan cron pekerjaan secara teratur menonaktifkan atau menghapus akun yang sudah melewati tanggal kadaluarsa mereka.
- Anda dapat mengirimkan e-mail newsletter sehari-hari.
- Jika Anda memiliki tabel ringkasan (atau pemandangan terwujud) dalam database Anda, mereka dapat secara teratur diperbarui dengan tugas cron. Misalnya Anda dapat menyimpan setiap halaman web hit di meja, tetapi tabel ringkasan lain mungkin berisi ringkasan lalu lintas harian.
- Anda dapat berakhir dan menghapus file data yang ditembolok dalam interval tertentu.
- Anda bisa auto-check konten situs web Anda untuk link yang rusak dan laporan e-mail kepada diri sendiri secara teratur.
- Anda dapat menjadwalkan berjalan lama tugas untuk menjalankan dari script baris perintah, bukan berjalan dari web script. Seperti encoding video, atau mengirimkan e-mail massal.
- Anda bahkan dapat melakukan sesuatu yang sederhana seperti mengambil Tweets Anda pemesanan, yang ditembolok dalam sebuah file teks.
Sintaks
Berikut adalah tugas cron sederhana:
1 |
10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1
|
Ada dua bagian utama:
- Bagian pertama adalah "10 * * * * ". Ini adalah dimana kita jadwal timer.
- Sisanya dari garis adalah perintah karena hal itu akan dijalankan dari baris perintah.
Perintah itu sendiri dalam contoh ini memiliki tiga bagian:
- "/usr/bin/php". Skrip PHP biasanya tidak dapat dijalankan oleh mereka sendiri. Oleh karena itu kita perlu menjalankan melalui pengurai PHP.
- "/www/virtual/username/cron.php". Ini adalah hanya jalan ke script.
- "> /dev/null 2>&1". Bagian ini menangani output script. Lebih lanjut tentang ini nanti.
Waktu sintaks
Ini adalah bagian pertama dari string cron pekerjaan, seperti disebutkan di atas. Menentukan seberapa sering dan Kapan tugas cron akan berjalan.
Terdiri dari lima bagian:
- menit
- jam
- bulan
- bulan
- hari Minggu
Berikut ini adalah ilustrasi:



Asterisk
Cukup sering, Anda akan melihat sebuah asterisk (*) bukan nomor. Ini mewakili semua angka-angka untuk posisi tersebut. Sebagai contoh, asterisk posisi menit akan berjalan setiap menit.
Kita perlu melihat beberapa contoh untuk sepenuhnya memahami sintaks ini.
Contoh:
Cron pekerjaan ini akan berjalan setiap menit, setiap saat:
1 |
* * * * * [command] |
Cron pekerjaan ini akan berjalan pada menit nol, setiap jam (yaitu per jam cron job):
1 |
0 * * * * [command] |
Ini juga merupakan tugas cron per jam tapi dijalankan pada menit 15 sebaliknya (yaitu 00:15, 01:15, 02:15 dll.):
1 |
15 * * * * [command] |
Ini akan menjalankan sekali sehari, di 2:30:
1 |
30 2 * * * [command] |
Ini akan menjalankan sekali sebulan, pada hari kedua bulan pada tengah malam (yaitu Januari 2 12:00 am, 2 Februari 12:00 am dll.):
1 |
0 0 2 * * [command] |
Ini akan berjalan pada hari Senin, setiap jam (yaitu 24 kali dalam satu hari, tetapi hanya pada hari Senin):
1 |
0 * * * 1 [command] |
Anda dapat menggunakan beberapa nomor yang dipisahkan dengan koma. Ini akan menjalankan tiga kali setiap jam, menit 0, 10, dan 20:
1 |
0,10,20 * * * * [command] |
Divisi operator juga digunakan. Ini akan menjalankan 12 kali per jam, yaitu setiap 5 menit:
1 |
*/5 * * * * [command] |
Tanda minus dapat digunakan untuk menentukan rentang. Ini akan menjalankan sekali setiap jam antara pukul 10:00 am:
1 |
0 5-10 * * * [command] |
Juga ada kata kunci khusus yang akan membiarkan Anda menjalankan tugas cron setiap kali server reboot:
1 |
@reboot [command] |
Menyiapkan dan Mengelola Cron Jobs
Ada beberapa cara yang berbeda untuk membuat dan mengelola cron pekerjaan Anda.
Panel kontrol
Banyak perusahaan hosting web memberikan panel kontrol untuk pelanggan mereka. Jika Anda salah satu dari mereka, Anda mungkin dapat menemukan bagian dalam panel kontrol Anda untuk mengelola cron pekerjaan Anda.



Mengedit Crontab
Menjalankan perintah ini akan meluncurkan vi (teks editor) dan akan membiarkan Anda mengedit isi crontab:
1 |
crontab -e |



Jadi itu akan membantu untuk menjadi akrab dengan perintah vi dasar seperti itu sangat berbeda dari editor teks lain yang Anda mungkin telah bekerja dengan.
Jika Anda hanya ingin melihat crontab yang ada tanpa mengedit, Anda dapat menjalankan perintah ini:
1 |
crontab -l |



Untuk menghapus isi crontab:
1 |
crontab -r |

Memuat File
Anda dapat menulis semua pekerjaan cron Anda ke dalam sebuah file dan kemudian mendorong ke crontab:
1 |
crontab cron.txt |
Hati-hati, karena ini akan menimpa semua ada cron pekerjaan dengan isi file ini, tanpa peringatan.
Komentar
Anda dapat menambahkan komentar yang diikuti oleh karakter #.
1 |
# This cron job does something very important |
2 |
10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1
|
Pengaturan E-mail
Seperti yang saya sebutkan sebelumnya, secara default output dari crons akan dikirim melalui e-mail, kecuali jika Anda membuang mereka atau mengarahkan mereka ke file. Pengaturan MAILTO Mari kita Anda menyetel atau merubah alamat e-mail mana untuk mengirim mereka ke:
1 |
MAILTO="username@example.com" |
2 |
# This cron job does something very important |
3 |
10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1
|
Menggunakan pengurai PHP
CGI skrip dieksekusi secara default, tetapi skrip PHP tidak. Mereka perlu menjalankan melalui parser PHP. Itu sebabnya kita perlu menempatkan path ke parser sebelum jalannya skrip.
1 |
* * * * * /usr/bin/php [path to php script] |
Terkadang mungkin di bawah lokasi lain seperti: "/usr/local/bin/php". Untuk mencari tahu, kamu dapat mencoba menjalankan ini di baris perintah:
1 |
which php |

Menangani Keluaran
Jika Anda tidak menangani output script cron, akan mengirim mereka sebagai e-mail ke akun pengguna di server.
Membuang Output
Jika Anda memasukkan "> / dev/null 2 > & 1" pada akhir perintah pekerjaan cron (atau perintah), output akan dibuang.



Penutupan braket (>) digunakan untuk mengarahkan output. "/ dev/null" adalah seperti sebuah lubang hitam untuk output. Apa pun yang pergi ke sana akan diabaikan oleh sistem.
Bagian ini "2 > & 1" menyebabkan STDERR (error) output akan diarahkan ke STDOUT output (normal). Jadi yang juga berakhir di "/ dev/null".
Keluaran ke File
Untuk menyimpan cron output dalam file, menggunakan penutupan braket (>) lagi:
1 |
10 * * * * /usr/bin/php /www/virtual/username/cron.php > /var/log/cron.log |
Yang akan menulis ulang output file dengan setiap kali. Jika Anda ingin menambahkan output pada akhir file bukan lengkap menulis ulang, menggunakan double penutupan braket (>) sebagai gantinya:
1 |
10 * * * * /usr/bin/php /www/virtual/username/cron.php >> /var/log/cron.log |
Eksekusi script
Biasanya Anda perlu menentukan parser di awal perintah seperti yang telah kami lakukan. Tapi benar-benar ada cara untuk membuat skrip PHP dapat dijalankan dari baris perintah seperti CGI script.
Yang Anda butuhkan adalah menambahkan path ke parser sebagai baris pertama dari script:
1 |
#!/usr/local/bin/php |
2 |
<?php
|
3 |
|
4 |
echo "hello world\n"; |
5 |
|
6 |
// ...
|
7 |
|
8 |
?>
|
Juga pastikan untuk mengatur benar chmod (seperti 755) untuk membuat file eksekusi.



Bila Anda memiliki script yang executable, tugas cron dapat lebih pendek seperti ini:
1 |
10 * * * * /www/virtual/username/hello.php |
Mencegah tugas Cron tabrakan
Dalam beberapa kasus Anda mungkin memiliki sering menjalankan cron pekerjaan, dan Anda mungkin tidak ingin mereka berbenturan jika mereka mengambil lebih lama untuk menjalankan daripada frekuensi itu sendiri.
Misalnya, Anda mungkin memiliki tugas cron menjalankan setiap menit. Namun, setiap sekali dalam beberapa saat itu dapat mengambil lebih dari satu menit untuk menjalankan. Ini dapat menyebabkan contoh lain dari script cron sama untuk mulai berjalan sebelum selesai satu sebelumnya. Anda dapat membuat terlalu banyak sibuk proses dengan cara ini dan mungkin crash server jika mereka terus memperlambat satu sama lain, dan menyebabkan lebih proses akan dibuat dari waktu ke waktu.
Masalah ini dapat diatasi melalui file mengunci, dan lebih khusus lagi non-blocking (LOCK_NB) jenis file kunci. (Jika Anda tidak akrab dengan mengunci file, saya sarankan Anda membaca tentang hal itu pertama.)
Anda dapat menambahkan kode ini ke cron pekerjaan script:
1 |
$fp = fopen('/tmp/lock.txt', 'r+'); |
2 |
|
3 |
if(!flock($fp, LOCK_EX | LOCK_NB)) { |
4 |
echo 'Unable to obtain lock'; |
5 |
exit(-1); |
6 |
}
|
7 |
|
8 |
/* ... */
|
9 |
|
10 |
fclose($fp); |
Dengan file biasa kunci flock() fungsi panggilan akan memblokir script jika ada kunci yang sudah ada. Dan itu akan melepaskan sekali kunci hilang. Namun, dengan kunci non-blocking, seperti dalam kode di atas, fungsi panggilan tidak berhenti script, tetapi segera kembali palsu jika ada kunci yang sudah ada. Jadi dalam hal ini, kita dapat segera keluar script ketika kita melihat ada kunci yang ada, yang menunjukkan bahwa pekerjaan cron lain yang sedang berjalan.
Memblokir akses Web ke Cron Jobs
Ketika Anda menulis tugas cron dalam bahasa scripting web seperti PHP, Anda mungkin ingin memastikan bahwa tidak ada yang dapat mengeksekusinya dengan hanya memuatnya dari browser mereka. Satu opsi mudah adalah menyimpan skrip ini di luar folder web Anda. Namun ini mungkin tidak praktis atau lebih baik untuk beberapa pengembang, jika mereka ingin menjaga skrip pekerjaan cron mereka tepat di dalam folder aplikasi web mereka.
Jika Anda meletakkan semua skrip pekerjaan cron dalam folder, Anda memblokir akses dengan meletakkan baris ini dalam file .htaccess:
1 |
deny from all |
Atau Anda juga dapat menolak akses ke skrip secara individual dengan menempatkan baris ini di awal:
1 |
|
2 |
if (isset($_SERVER['REMOTE_ADDR'])) die('Permission denied.'); |
Ini akan memastikan bahwa, ketika skrip diakses dari web, itu akan dibatalkan segera.
Kesimpulan
Terima kasih telah membaca. Meskipun cron jobs hanya tampak seperti alat hanya untuk admin sistem, mereka sebenarnya relevan dengan banyak jenis aplikasi web.
Silakan tinggalkan komentar dan pertanyaan Anda, dan semoga hari Anda menyenangkan!
Tulis Tutorial Plus
Tahukah Anda bahwa Anda dapat menghasilkan hingga $ 600 untuk menulis tutorial dan / atau screencast PLUS bagi kami? Kami mencari tutorial yang mendalam dan ditulis dengan baik tentang HTML, CSS, PHP, dan JavaScript. Jika Anda memiliki kemampuan, silakan hubungi Jeffrey di nettuts tutsplus.com.
Harap dicatat bahwa kompensasi aktual akan tergantung pada kualitas dari tutorial akhir dan screencast.

- Ikuti kami di Twitter, atau berlangganan Nettuts+ RSS Feed untuk tutorial pengembangan web terbaik di web.