linuxde ram e göre servis kapatıp açmak

daha önceki yazımda php killemekden bahsetmiştim bunuda crona sokup apache nin gerekeni yapacağına inanıyordum lakin umduğum gibi olmadı kill i yiyen php bidaha gelmedi. bu durumda şişip duran ramı nasıl kurtarabilirim. tabiiki rame bakıp eğer şişen servisimi restart edersem olay tamamdır.

benim durumumda apache2 servisi bi şekil php nin stabilsizliğinden belirsiz bi yerden patlıyor ve şişmeye başlıyor bütün ramı doldurup sonunda linuxe ssh ile bağlanılamaz hale getiriyordu. öncelikle crontab komutumu göstereyim:


# m h dom mon dow command
*/1 * * * * /usr/bin/phpler

bu dakikada bir bunu çalıştır demek oluyor burayada “crontab -e” ile ulaşılıyor. şimdi phpler scriptimi gösterim:


#!/bin/bash
ramTotal=`free -mo | awk 'NR==2 {print $3}'`
if [ $ramTotal -ge 3600 ] ; then
echo "restart apache"
`/etc/init.d/apache2 restart`
`/usr/bin/mailgonder`
else
echo "long live php "
fi

buda özünde awk ve free komutuyla ne kadar ramın kullanıldığüını buluyor. benim serverımda 3969mb ram var ve 3600 den fazla ram kullanılıyorsa bu extrem bir durum linuxum için ve apache me restart veriyor. altındaki mailgonder ne olaki diyenler için buyrun:


#!/bin/bash
SUBJECT="siteismi restart oldu"
EMAIL="dont@spam.com"
tarih=`date`
EMAILMESSAGE="apache restart oldu $tarih"
echo "$EMAILMESSAGE" | mail -s "$SUBJECT" "$EMAIL"

buda apache restart olursa bana bir tane mail gönderiyor bu sayede bende olan bitenden haberdar olup durumu izleyebilirim.