Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
Share Thread:
Programatik olarak bir programı durdurup yeniden başlatmak
#1
Merhabalar. crontab ile bir txt dosyasını aralıklı olarak güncellemekteyim. Amacım bu txt dosyasını kaynak olarak kullanan programın bu güncelleme esnasında durdurulup (program .py uzantılı) güncelleme işleminden sonra tekrar çalıştırılması. Bu işlem yine crontab da yapılabilir mi acaba? (txt yi kullanan programda program ilk açıldığında txt içeriğini okuyup diziye aktarıyorum. Bu sebeple txt dosya sadece program açılırken okunuyor..)

Bilgisi olan arkadaşlar yardım edebilirse çok sevinirim.

İyi forumlar..
Ara
Cevapla
#2
Evet ama aklıma birden fazla yol geldi. Ne yapmak istediğinizi belirtirseniz daha iyi yardımcı olabilirim.

Python da ne çalışıyor ?
İlk olarak başka bir dosyaya 1 0 gibi değer vererek programın içinde bunu okutup ne zaman programın çalışacağını kapanacağını belirtebilirsiniz.

2. olarak programı kill ( linux komutu ama net hatırlamıyorum doğru mu) ile programı kapatmanız gerekiyor. Bunu direk cron tab e ekleyebilirsiniz işleminizin sırasına göre
Cevapla
#3
Öncelikle yanıt icin çok teşekkür ederim Hocam. 

Rasperry pi da Raspbian Stretch çalışıyor.

Bir adet servo motor için konum bilgileri txt dosyadan okunuyor. (Günün her saati ve her dakikası için farklı konum bilgileri gelebilmekte ve bu bilgiler hergun saat 23 de (crontab ile) başka bir python programı ile güncellenmekte). (Python3 guncelle.py)
Yapmak istedigim şey: ilgili txt dosyasını okuyup islem yapan programin, bu güncelleme esnasında durup guncellemeden sonra tekrar calistirilmasi. (Python3 islem.py)

Umarım tam olarak izah edebilmisimdir.

Şimdiden teşekkürler..
Ara
Cevapla
#4
İlk yöntemi anlatacağım. Yapmanız gereken 2 3 adım var.

Bir tane durum.txt oluşturacaksınız bu dosya yine islem.py de çalışacak ama diğer txt dosyanızdan önce çalışması gerekiyor. Programın en üstünde durum txt yi kontrol ettirip eğer 1 se çalışmasını söyleyeceksiniz. 0 sa çalışmayacak.

Birde cron tab dosyanızda 3 satır olacak
durum.txt > 0
python guncelle.py
durum.txt > 1

Bu sayede komut başlarken beklemeye alacak bitince geri aktif olacak. İslem.py de buna göre çalışacak. Şu an telefonda olduğum için kod olarak veremeyeceğim ama mantık bu şekilde olacak.
Cevapla
#5
Hocam cevap için çok teşekkür ederim. 

Ancak bu durunda islem.py sürekli olarak durum.txt yi kontrol ettirecek anladığım kadarıyla. Sanırım bence bu yöntem biraz daha işleri karmasiklastitacak. Bunun yerine güncelleme vakti geldiğinde crontab da dediginiz ikinci yontem.olan kill komutu ile islem.py durdurulsa/kapatılsa. Güncelleme.py çalışsa. Ardından tekrar işlem.py calistirilsa çok güzel olacak. Ama internette bulmuş olduğum kill komutları bir türlü uygulamayı sonlandırmadi. Bunun ile uğraşmaktayım.
Ara
Cevapla
#6
Kontrol etmesinde bir sakınca yok çünkü ona göre işlem yapacak çakışma olmaaycak istediğiniz sonucu elde edeceksiniz. Ben çözümü sundum istediğinizi kullanabilirsiniz Smile
Cevapla
#7
Teşekkür ederim cyberwacky. 

Kill komutu hakkında bilgi ve tecrübesi olan forumdaşlarımdan yardım talep ediyorum.
Ara
Cevapla
#8
Şöyle bir çözüm buldum. Belki ihtiyacı olan arkadaşlar istifa edebilirler diye yazıyorum.


Kod:
crontab -e
 komutu ile en alta:

Kod:
00 23 * * * sudo pkill -f islem.py  # islem.py de /home/pi/sources/ yolu altında çalışıyor ancak kill etmek için path belirtmiyoruz. -f parametresi ile proccess'in id ni değilde adını verebiliyoruz..
00 23 * * * /usr/bin/python3 /home/pi/sources/guncelle.py  # islem.py sonlandırıldıktan sonra ilgili txt yi güncelleyecek olan guncelle.py yi de aynı zamanda (gece 23:00'da) çalıştırıyoruz.
01 23 * * * /usr/bin/python3 /home/pi/sources/islem.py  #islem.py' yi 23:01 de tekrar çalıştırıyoruz..



kodlarını ekliyoruz.

Açıklama kısımlarında belirttiğim gibi 23:01 de tekrar islem.py yi tekrar başlatabildim. hepsi 23:00'da olmadı bir türlü. Belki de bu nokta da bana birisi yol gösterebilir. Çünkü program 1dk süre ile hiç çalışmıyor.. 

Ancak dediğim gibi yukarıda şekilde bir python uygulamanızı zamanlanmış görevler yardımıyla sonlandırıp tekrar başlatabilirsiniz.. (tabiki 1 dk ara ile  Rolleyes )
Ara
Cevapla
#9
Komutları neden ayrı ayrı yazdıgınızın sebebini anlayamadım. Oncelikle bu komutları tek bir script dosyasına yazıp o  şekilde sıra ile çalıştırmak en mantıklısı olacakdırki cyberwacky arkadaşımızda benzer bir oneride bulunmus . Örnegin
/home/pi/sources/start.sh adında bir dosya olusturup içerisine komutları kaydedelim.
Kod:
#!/bin/bash
sudo pkill -f islem.py  
/usr/bin/python3 /home/pi/sources/guncelle.py
/usr/bin/python3 /home/pi/sources/islem.py  
sonrasında dosyamızı çalıştırılabilir hale getirelim.
chmod +x /home/pi/sources/start.sh
ve crontab dosyasına aşağıdaki şekilde bir görev yazalım.
Kod:
00 23 * * * /home/pi/sources/./start.sh
Sistem şu şekilde çalışacaktır saat 23 de otomotik olarak start.sh scripti çalışacaktır. Önce islem.py sonlandırılacak, devamında guncelle scripti çalışacak ve sonrasında islem.py tekrar çalıştırılacaktır. Aradaki 1 dklık gecikmede sozkonusu olmayacaktır.
Kolay gelsin.
Ara
Cevapla
#10
Ne diyeceğimi bilemiyorum. Size çok ama çok teşekkür ederim Sayın adogado Hocam.
Kodlar kusursuz işledi.

Müsadenizle size birşey daha danışmak istiyorum:

ben islem.py yi manual çalıştırıp klavyeden ctrl+c yapınca program düzgün bir biçimde sonlanıyor. (KeyboardInterrupt yazarak) Düzgün dememdeki kasıt ben try catch ve finally blokları kullanarak finally bloğu içerisinde GPIO'ları sıfırlıyorum. Pinlere Led bağlı ve ledleri led1.off(), led2.off() şeklinde kapatıyorum. 

Dediğim gibi ctrl+c ye basarak sonlandırdığımda o anda yanan ledler sönüyor. Ancak yine manual olarak başlattığım islem.py yi ayrı açtığım bir terminal penceresinden 
Kod:
sudo pkill -f islem.py

şeklinde sonlandırdığımda Terminated yazarak programı sonlandırıyor ama ledler o anda nasılsa öyle kalıyor. Şu komutu denendiğimde de yine ledler aynı kalıyor ancak bu defa Killed yazarak programı sonlandırıyor.
Kod:
sodu pkill -9 -f islem.py

Sebebini bir türlü anlayamadım. Yol gösterebilirseniz çok sevinirim.

Tekrar teşekkür eder, iyi forumlar dilerim..
Ara
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [Makale] Raspberry'de bir programı açılışta çalıştırmak otonomi 4 8,493 02-21-2019, 08:52 PM
Son Yorum: RecepClk
  Java Jar programı otomatik başlatma delipilot 1 3,394 11-26-2015, 11:59 PM
Son Yorum: Arda

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi