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
Derxfn
March 29, 2024 - 7:59 pm
buy seroquel online – desyrel 100mg oral buy eskalith pill
Wfnsst
March 30, 2024 - 6:11 pm
generic clomipramine 25mg – clomipramine 50mg pill doxepin 75mg ca
Spbsjo
March 31, 2024 - 6:57 pm
buy atarax 25mg online – buy pamelor no prescription amitriptyline 10mg without prescription
Wjkttw
April 3, 2024 - 8:21 pm
order augmentin generic – order augmentin 1000mg sale ciprofloxacin 500mg drug
Ppnilf
April 4, 2024 - 9:44 am
amoxicillin drug – purchase cephalexin for sale generic baycip
Dnifvd
April 9, 2024 - 6:58 pm
buy cleocin pills for sale – order cefixime for sale chloramphenicol tablets
Vjypze
April 9, 2024 - 7:10 pm
order azithromycin without prescription – purchase ciplox sale brand ciplox 500 mg
Xfvckf
April 12, 2024 - 11:57 am
ivermectin 3mg – order levofloxacin pill buy cefaclor 500mg capsules
Qenfvh
April 13, 2024 - 10:08 am
order generic ventolin 4mg – buy cheap generic allegra theophylline order online
Dlbvoe
April 15, 2024 - 11:59 am
buy depo-medrol for sale – order loratadine 10mg for sale buy azelastine 10 ml for sale
Cmxgop
April 15, 2024 - 7:29 pm
generic desloratadine 5mg – purchase albuterol generic order albuterol pill
Dwjxlj
April 17, 2024 - 7:10 pm
purchase micronase sale – buy pioglitazone 30mg buy generic dapagliflozin 10 mg
Pnrzdj
April 19, 2024 - 2:08 pm
glycomet 500mg generic – metformin order online acarbose 25mg generic
Wwhxad
April 19, 2024 - 7:54 pm
prandin 1mg price – repaglinide over the counter empagliflozin 25mg price
bitcoin pharmacy online
April 22, 2024 - 8:15 am
online pharmacy china
Wnarsf
April 22, 2024 - 12:58 pm
terbinafine usa – lamisil 250mg uk grifulvin v ca
Ujxxtl
April 22, 2024 - 3:01 pm
purchase rybelsus – order DDAVP purchase desmopressin spray
Sthhrl
April 24, 2024 - 4:33 pm
ketoconazole 200mg pill – buy cheap generic ketoconazole purchase sporanox generic
Dcjdla
April 25, 2024 - 4:33 pm
buy generic famciclovir – zovirax 800mg ca valcivir medication