Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
Share Thread:
Açılışta çalışmaya başlayacak Servis Yazmak
#1
Merhaba arkadaşlar,


konuyu yanlış yere açmış olabilirim belki, uygun bir alana taşınabilir forum yöneticileri tarafından.


Ben geçtiğimiz yıl raspberry Pi 2 model b satın aldım ve sadece media center olarak(kodi) kullanıyordum vakit ayıramadığımdan dolayı.


fakat donanımsal ihtiyaçlardan dolayı raspberry üzerinde basit ve daha ekonomik yollarla ihtiyacım olan donanımı ve daha fazlasını karşılayabileceğim sonucuna vardım ve kolları sıvadım.


uzun yıllardır profesyonel anlamda web, desktop ve sunucu yazılımları geliştiriyorum. tabi bu yazılımlar .net tabanlı. linux, php, mysql ve python bana çok yabancı konulardı.


bir haftadır üzerinde çalıştığım proje için boş vakitlerimde bir şeyler yapmaya çalışıyorum. örneğin python ile işi yapacak uygulamayı ve php ile web arayüzünü geliştirmeyi tamamladım. Bu gerekli bilgileri python uygulaması ile alarak mysql dbye yazılıyor ve web arayüzünden istenilen yerden bakılabiliyor ve sistem canlı olarak takip edilmekle birlikte web arayüzünden müdahale edilebiliyor. Tabi bu arada sistem üzerinde oluşturduğum kural modülü sayesinde sensörler belirlenen kurallara göre röleleri otomatik açıp kapatıabiliyor. Örneğin sıcaklık 26 dereceye ulaşırsa röle aktif hale getiriliyor ve 23 dereceye eşit veya altına düşerse röle kapatılıyor. Aslında röle kapatıldığında devre kapanmış olup aktif hale geldiği, açık olduğunda deaktif hale geldiği anlaşılıyor elektrik mantığına göre siz anladınız onu SmileZamanlanmış diğer görevler için yapılacak işleri bir sonraki adımda yapmayı planlıyorum. bütün yönetim web arayüzünden olmakla birlikte istenen röle web arayüzünden açıp kapatılabiliyor(KURAL TANIMLANMAYANLAR RÖLELER TABİ Kİ). Sistem tamamen parametrik halde.

benim sorunuma gelince.
sistem başladığından otomatik olarak çalışmaya başlayacak bir servis yazmam gerekiyor. Aslında yazdığım python uygulamasını servis olarak sistem açıldığında başlatmak istiyorum.
crontab işimi maalesef görmüyor. Bu adımda linux servisi yazmam gerekiyor. İnternette bir kaç örnek buldum ve uyguladım fakat manuel olarak console da start yapmadığım sürece çalışmıyor.

bana adım adım linux(jessie) üzerinde servis yazmayı anlatabiecek veya yönlendirebilecek arkadaşlar varsa yardımlarını rica ediyorum.

biraz dağınık cümleler oldu kusara bakmayın.

kolay gelsin herkeze Smile
Ara
Cevapla
#2
Manuel olarak konsola yazdigin kod nedir ?

LG-E610 cihazımdan Tapatalk kullanılarak gönderildi
Ara
Cevapla
#3
(04-11-2016, 01:51 PM)furkan150061 Nickli Kullanıcıdan Alıntı: Manuel olarak konsola yazdigin kod nedir ?

LG-E610 cihazımdan Tapatalk kullanılarak gönderildi

Merhaba,

örnek olarak verecek olursak;
sudo python /...../...../Script.py
gibi.

ama biraz daha açık sorarsanız cevap vermeye çalışırım.
Ara
Cevapla
#4
İstediğimi öğrendim. Ben rölenin belirli sürede açılıp kapanması için crontab ı kullanıyordum. Raspi açılırken Pythonda çalışıyordu.
şöyle deneyin birde:
sudo crontab -e

python /dosya/yolu/python.py &

Sonundaki & işareti pythonun arka planda sürekli çalışmasını sağlıyor.

LG-E610 cihazımdan Tapatalk kullanılarak gönderildi
Ara
Cevapla
#5
Maalesef crontab isimi gormuyor. Servis yazmak gerekiyor. Crontab ile bir isi belirli araliklarla yapmak gerekiyor ve uygulamasayi sonlandiriyor, bu da isimi gormuyor. Cunku her seferinde gpio baglantilarini sifirliyor bu durumda.

Servis yazma konusunda yardimci olabilecek varsa sevinirim.
Ara
Cevapla
#6
Merhaba arkadaşlar,

son yorumumdan bir kaç gün sonra servis oluşturma işlemini gerçekleştirdim ve burada da paylaşmam gerektiğini düşündüm.

Ancak yazabiliyorum kusura bakmayın lütfen....

Öncelikle işlemi yapacak olan pyton dosyasımızı oluşturuyoruz.

Kod:
sudo nano /usr/local/bin/MyService.py

sonrasında bu dosyayı herkesin çalıştırabilmesi için gerekli yetkilendirmeyi yapıyoruz.
Kod:
sudo chmod +x /usr/local/bin/MyService.py

Oluşturduğumuz python dosyamızı çalıştıracak linux servis dosyamızı oluşturmak için aşağıdaki kodu giriyoruz.
Kod:
sudo nano /lib/systemd/system/MyService.service

Açılan ekranda aşağıdaki kodları giriyoruz.
Kod:
[Unit]
Description=MyService
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python /usr/local/bin/MyService.py
StandardOutput=null

[Install]
WantedBy=multi-user.target
Alias=MyService.service

Şimdi servisdosyamızı tam olarak oluşturmuş olduk. fakat bu dosyayıda sistemin çalıştırabilmesi için aşağıdaki kod ile öncelikle yetkilendirmelerini tamamlamamız gerekiyor.
Kod:
sudo chmod 644 /lib/systemd/system/MyService.service

Servisimizi işletim sistemine eklemek ve aktif duruma getirmek için aşağıdaki kodları sırası ile giriyoruz.
Kod:
sudo systemctl daemon-reload
sudo systemctl enable MyService.service
echo sudo systemctl start MyService.service

Servisimizşu anda aktif çalışmaya başladı ve aktif durumda. Raspberry yeniden başladığında da aktif duruma gelebilecek son halinde.

Fakat bütün bu işlemler sonrasında oluşturmamız gereken son bir dosya kaldı. Bu dosya ile servisimi durdurup başlatabileceğiz ve durumu hakkında bilgi alabileceğiz.
Bunun için aşağıdaki kod ile dosyamızı oluşturacağımız ekranı açıyoruz.
Kod:
sudo nano /etc/init.d/MyService.sh

Açılan ekranda aşağıdaki kodları ekliyoruz.
Kod:
#!/bin/sh

### BEGIN INIT INFO
# Provides:          MyService
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Put a short description of the service here
# Description:       Put a long description of the service here
### END INIT INFO

# Change the next 3 lines to suit where you install your script and what you want to call it
DIR=/usr/local/bin
DAEMON=$DIR/MyService.py
DAEMON_NAME=MyService

# Add any command line options for your daemon here
DAEMON_OPTS=""

# This next line determines what user the script runs as.
# Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python.
DAEMON_USER=root

# The process ID of the script when it runs is stored here:
PIDFILE=/var/run/$DAEMON_NAME.pid

. /lib/lsb/init-functions

do_start () {
   log_daemon_msg "Starting system $DAEMON_NAME daemon"
   start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS
   log_end_msg $?
}
do_stop () {
   log_daemon_msg "Stopping system $DAEMON_NAME daemon"
   start-stop-daemon --stop --pidfile $PIDFILE --retry 10
   /usr/bin/python /usr/local/bin/MyService/MyServiceCleanup.py
   log_end_msg $?
}

case "$1" in

   start|stop)
       do_${1}
       ;;

   "")
       do_stop
    do_start
       ;;

   restart|reload|force-reload)
       do_stop
       do_start
       ;;

   status)
       status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $?
       ;;

   *)
       echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}"
       exit 1
       ;;

esac
exit 0

Kodları ekledikten sonra ekrandan değişiklikleri kaydederek çıkıyoruz.

Artık servisimizi başlatmak için
Kod:
sudo /etc/init.d/MyService.sh start

Servisimizi durdurmak için
Kod:
sudo /etc/init.d/MyService.sh stop

Servisimizi yeniden başlatmak için
Kod:
sudo /etc/init.d/MyService.sh restart

ve servisimiz hakkında bilgi almak için
Kod:
sudo /etc/init.d/MyService.sh status

komutlarını kullanabiliriz.

Artık servisimiz tam anlamıyla hazır durumda. Yazdığım adımları birebir gerçekleştirdiğseniz servisinizin durumunu direk kontrol edebilirsiniz.
Kod:
sudo /etc/init.d/MyService.sh status

örnek görüntüsü ekteki şekilde olacaktır.(kırmızı alanları malesef gizlemek durumundayım)


Ben örnek servis adı olarak MyService ismini kullandım. Siz istediğiniz adı kullanabilirsiniz dosyalara isim verirken. Fakat yaptığınız değişiklikleri kodlar içinde de gerçekleştirmeyi unutmayın.


Umarım işinize yarayacak bir bilgi olmuştur.


Ek Dosyalar Ekran Görüntüleri
   
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,499 02-21-2019, 08:52 PM
Son Yorum: RecepClk
  Xset ederken hata geldiği icin servis baslamiyor. Lütfen Yardım beyazyelken 4 2,241 01-20-2018, 01:00 AM
Son Yorum: beyazyelken

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi