linux script process kontrol

Başlatan the veterist, 07 Kasım 2017 - 20:05:51

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

the veterist

Linux ubuntu da java kodu yada linux scriptle boyle bır odevım var.Nasıl yapabılırım yardımcı olur musunuz ?Process-list diye daha önceden içini doldurduğumuz bir text file okuyacak ve içerisindeki process isimlerini tek tek çalışıp çalışmadığını kontrol edecek ve çalışmayan tespit ederse bir log dosyasına tarih ve saat atarak yazacak,Bu yazdığın script'ide linux'da periyordik çalışabilir olarak gösterip 1dk da bir çalışmasını sağlayacaksın,
Okuyacağı parametre dosyasının adı process-list.txt olabilir.

-ubuntu yu kurdum.kafamızı gore olusturdugumuz processlerin tek tek calısıp calısmadıgı kontrolunu nasıl yapabılırım orda tıkandım.

mhmtkrktr

Anladığın yerlerini hazırlayıp paylaşsan ve yapamadığın yerleri bunun üzerinden sorsan daha güzel olurdu.  :)
Prosess den kastın tam olarak nedir bilemiyorum ama aradığın komut ps olabilir.

uygulama='????'
if $(ps -aux | grep -v grep| grep -qi "$uygulama"); then
    echo çalışıyor
else
    echo çalışmıyor
fi


uygulama değişkenini while döngüsü ile process-list.txt içerisinden alırsın.
Yukarıda ki gibi ps listesinin koşuluna uyanları\uymayanları ayırabilirsin.
Sonucu dosyaya yazdırmak istiyorsan echo veya tee komutları yardımcı olacaktır.
Çalışma zamanı için basitce sleep kullanabilirsin. Amacına göre cronie vb. de olabilir. 
Zaman etiketi için date komutunu inceleyip istediğin gibi şekillendirebilirsin. örn:(date +%D" "%H_%M)

Adı geçen tüm komutlarının parametrelerine "komut --help" yazarak ulaşabilirsin.

the veterist

#! /bin/bash

while read prcs;
do
if $(ps -aux | grep -v grep| grep -qi "$prcs");   then

echo "çalışıyor"

else
echo "çalışmıyor"  $(date) >> dosya.log

fi

done < prcs.txt

bu kodda crontab  ile her dakika ( */1 * * * * ) da bir çalışmasını nasıl sağlayabilirim ? kod kısmında mı yazmam gerekıyor yoksa ayrı bir yerde mi çalıstırmam lazım ?

mhmtkrktr

#3
#!/bin/bash

kaynak_dosya="/falanca/filanca_dizin/process-list.txt"
log_dosya="/falanca/filanca_dizin/process.log"

if test -f $kaynak_dosya; then ## dosyanın yanlışlıkla silinmiş olma durumuna karşı
while read prcs;
do
if ! $(ps -ax | grep -v grep| grep -qi "${prgr}"|grep -v "${prgr}-");   then

echo -e "\n$(date) \n${prcs} \t-->\t çalışmıyor" >> $log_dosya

fi

done < $kaynak_dosya
fi


Dosyaları düzgün şekilde konumlandırıp, /etc/cron.hourly/ altına process adıyla koyabilirsin. Process dosyasına çalışma izni verirsin ve saatlik olarak çalışmaya başlar.

Not:
a) if ! tanım: şeklinde olumsuzluk durumunu uygulayabilirsin. Çalışmanı buna göre değiştirdim. Dilersen senin düzenlediğin şekilde de olur.

b) Dosyaları senin yaptığın gibi doğrudan komutlara da yazabilirsin. Ama alışma açısından değişkene tanımlamak daha kullanışlı olacaktır. Bu da yine isteğine kalmış.

c) Dosyaya belirli bir ön yol koymazsan, dosya nerede çalışırsa ilgili kaynak dosyayı orada arar ve yine log dosyasını oraya oluşturur. Bu, duruma göre kullanışsız veya hatalı olabilir. Örneğin şu şekilde bir yol belirleyebilirsin.
kaynak_dosya="/home/$USER/process-list.txt" 

the veterist

teşekkur ederim  :) crontab ile dakıka da bır dondurmem lazım calısp calısmadıgını kontrol ıcın etc/cron.hourly ile olmuyor sanırım

mhmtkrktr

Son mesajını okudum ancak nedense benim aklımda saatlik olarak kalmış. Burada ki konu yardımcı olur sanıyorum. https://forum.ubuntu-tr.net/index.php?topic=57769.msg632949#msg632949

İlave olarak, herhangi bir ek pakete gereksinim duymadan aynı işlevi döngü içine sleep 1m veya sleep 60 komutu vererekte sağlayabilirsin. Bu durumda betiğin bilgisayar açılışında aktif olabilmesi için ~/.config/autostart içerisine ilgili betiği çalıştıran bir başlatıcı (progress.desktop) oluşturman gerekir. Örnek başlatıcı dosyalarını /usr/share/applications içerisinde bulabilirsin.

the veterist

tesekkur ederim crontab ile işlemı saglayabildim.Tesekkurler :)