Mencegah cronjob terpanggil dobel – dobel
Pada kesempatan kali ini saya tidak membahas apa itu cronjob secara menyeluruh, karena sudah banyak sekali penjelasan tenang cronjob, tinggal search saja “cronjob adalah” maka sudah banyak artikel yang menjelaskan apa itu cronjob dan bagaimana cara mengaturnya.
Namun saya akan menyinggung secara singkat saja, cronjob merupakan salah satu fitur dari cPanel yang cukup penting, cronjob berguna untuk menjalankan script pada waktu sesuai jadwal yang kita atur sehingga akan sangat membantu programer untuk menjalankan fungsi tertentu.
Dibalik fungsinya tersebut, cronjob juga memiliki kelemahan menurut saya, dimana skrip yang kita panggil via cronjob bisa dipanggil bertumpuk – tumpuk. Misalnya kita mengatur cronjob yang memanggil skrip a.php dan dipanggil setiap menit, skrip a.php tersebut kadang-kadang memerlukan waktu lebih dari satu menit untuk menyelesaikan prosesnya, karena banyak query dan aksi yang dipanggil misalnya, ketika a.php belum selesai diproses dan sudah ada panggilan cronjob a.php berikutnya maka yang terjadi adalah proses akan menumpuk, panggilan pertama belum selesai sudah ada panggilan yang kedua, nanti panggilan yang kedua belum selesai sudah ada panggilan yang ketiga dan seterusnya dan seterusnya, lama – lama proses tersebut sangat memberatkan server dan server bisa down gara – gara proses cronjob tersebut.
Masalah tersebutlah yang sama-sama kita akan selesaikan.
Cara yang saya gunakan untuk menanggulangi masalah tersebut adalah dengan cara ketika skrip a.php dipanggil maka ciptakan semacam flag bahwa skrip a.php sedang dipanggil jika belum ada, jika flag sudah ada hentikan. Dan ketika a.php selesai melakukan tugasnya flag dihapus. Sehingga jika cronjob memanggil a.php dan terdapat flag maka tugas cronjob pada jadwal tersebut dianggap selesai, berikut contoh implementasinya:
a.php
[php]
<?php
# nama file untuk flag
$file_flag = "a.log";
# lokasi dimana akan dibuat, pada contoh ini dilokasi file ini berada
$path = __DIR__ . "/";
$path_file = $path . $file_flag;
# jika file sudah ada berarti sedang dijalanakan, jika belum ada lanjut
if (is_file($path_file)) {
die("hentikan");
}
# ciptakan file
touch($path_file);
/**
*
* Disini tempat jalankan fungsi
*/
# hapus flag jika sudah selesai
unlink($path_file);
[/php]
Pada contoh diatas, flag dibuat dengan cara menciptakan file tertentu sebagai tanda saja kalo sedang dijalankan. Flag tidak harus menciptakan file ya, bisa saja pake SESSION, atau dengan query ke record tabel tertentu.
Tanya mas, bagaimana jika terdapat kasus skrip a.php terdapat error saat menjalankan tugasnya dan flag belum sempat dihapus, sehingga panggilan – panggilan berikutnya akan selalu dihentikan?
Pertanyaan yang bagus sekali sodara – sodara, hehehe
Untuk menjawab pertanyaan tersebut bisa dengan cara dicek flag tersebut kapan dibuatnya, jika sudah lebih dari batas waktu yang kita tentukan berarti ada yang tidak beres. Misalnya kita kasih waktu maksimal 1 jam, karena tidak mungkin menjalankan skrip a.php sampai 1 jam lamanya, berikut contoh implementasinya:
Modifikasi bagian skrip a.php
[php]
# jika file sudah ada berarti sedang dijalanakan, jika belum ada lanjut
if (is_file($path_file)) {
$batas_waktu = "+1 hour";
$kapan_dibuat = filemtime($path_file);
# cek apakah tgl modifikasi + 1 hour kurang dari sekarang
if (strtotime($batas_waktu, $kapan_dibuat) < time()) {
unlink($path_file);
} else {
die("hentikan");
}
}
[/php]
Jika teman – teman masih bingung masalah operasi tanggal di PHP bisa baca post saya yang ini http://www.dokumenary.net/2017/09/02/operasi-tanggal-jam-strtotimedatetime-pada-php/.
Saya rasa cukup untuk post kali ini, jika ada yang masih bingung mari kita diskusikan pada komentar ya…
Jangan lupa like Facebook Page Dokumenary atau masukkan email Anda pada form subscribe bagian sidebar ya, supaya setiap update posting cepat Anda dapatkan.
Terimakasih 🙂
Category: Uncategorized
Nppcgs
March 11, 2024 - 7:27 pm
atorvastatin 80mg oral lipitor 40mg over the counter order lipitor pill
Rxxwem
March 14, 2024 - 1:06 pm
order baycip for sale – amoxiclav over the counter buy clavulanate for sale
Manpww
March 14, 2024 - 7:30 pm
purchase ciprofloxacin online cheap – keflex order online buy augmentin pills
Kzfcwu
March 17, 2024 - 3:20 pm
flagyl 200mg without prescription – terramycin 250 mg pills brand azithromycin 250mg
Creati un cont gratuit
March 17, 2024 - 3:35 pm
Thanks for sharing. I read many of your blog posts, cool, your blog is very good.
Fercpo
March 17, 2024 - 4:49 pm
purchase ciprofloxacin pills – buy generic amoxicillin online
erythromycin 500mg sale
Qgytox
March 19, 2024 - 8:10 pm
valtrex medication – buy nateglinide generic purchase acyclovir for sale
Jlumno
March 19, 2024 - 8:41 pm
stromectol 2mg online – amoxiclav cheap buy tetracycline 250mg sale
Ovuups
March 21, 2024 - 9:52 pm
cheap metronidazole 400mg – buy generic oxytetracycline for sale buy azithromycin medication
Vgaaua
March 21, 2024 - 10:17 pm
cost acillin penicillin for sale online oral amoxicillin
Yqgzjg
March 23, 2024 - 1:07 pm
buy lasix online cheap – tacrolimus 5mg oral oral capoten
Fuopsd
March 25, 2024 - 5:05 pm
order metformin 500mg online – buy generic lamivudine for sale order lincomycin 500 mg generic
Iamooc
March 26, 2024 - 7:05 pm
buy pill generic zidovudine – buy lamivudine online buy generic allopurinol online
Swkfsf
March 28, 2024 - 2:18 am
where can i buy clozapine – frumil 5 mg brand order famotidine 20mg