SORU
16 Ocak 2011, Pazar


Python betiği olarak linux servis/daemon

Merhaba,

Python bir betik (ubuntu) servis (daemon) olarak çalışacak linux anlatmaya çalışıyorum.

Web gibi çeşitli yolları vardır:

http://pypi.python.org/pypi/python-daemon/

Terbiyeli Unix artalan süreci yakalamak zor, ama gerekli adımları kadar her daemon program için aynıdır. DaemonContext bir örnek program için davranış ve yapılandırılmış bir süreç çevreye tutar; bağlama yöneticisi olarak örnek daemon bir devlet girmek için kullanın.

http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

Python senaryomu özellikle ubuntu linux ile entegre etmek istiyorum ancak benim çözüm bir init ile bir kombinasyonudur.d script

#!/bin/bash

WORK_DIR="/var/lib/foo"
DAEMON="/usr/bin/python"
ARGS="/opt/foo/linux_service.py"
PIDFILE="/var/run/foo.pid"
USER="foo"

case "$1" in
  start)
    echo "Starting server"
    mkdir -p "$WORK_DIR"
    /sbin/start-stop-daemon --start --pidfile $PIDFILE \
        --user $USER --group $USER \
        -b --make-pidfile \
        --chuid $USER \
        --exec $DAEMON $ARGS
    ;;
  stop)
    echo "Stopping server"
    /sbin/start-stop-daemon --stop --pidfile $PIDFILE --verbose
    ;;
  *)
    echo "Usage: /etc/init.d/$USER {start|stop}"
    exit 1
    ;;
esac

exit 0

ve python:

import signal
import time
import multiprocessing

stop_event = multiprocessing.Event()

def stop(signum, frame):
    stop_event.set()

signal.signal(signal.SIGTERM, stop)

if __name__ == '__main__':
    while not stop_event.is_set():
        time.sleep(3)

Şimdi sorum eğer bu yaklaşım doğru ise. Herhangi bir ek sinyal kolu var mı? Bu bir "terbiyeli daemon işlem Unıx".

CEVAP
16 Ocak 2011, Pazar


Daemon sürekli çalışan bir yol (bazı olay döngüsü,, ne olursa olsun çarpık) olduğu varsayımıyla, upstart kullanmayı deneyebilirsiniz.

İşte size bir örnek varsayımsal bir Python hizmet için config: sonradan görme

description "My service"
author  "Some Dude <blah@foo.com>"

start on runlevel [234]
stop on runlevel [0156]

chdir /some/dir
exec /some/dir/script.py
respawn

Siz komut dosyası olarak kaydedin./etc/init basit conf kerelik yapın

$ sudo initctl reload-configuration
$ sudo start script

stop script ile durdurabilirsiniz. Yukarıda sonradan görme conf diyor ne olursa ölür sanki yeniden doğmuş gibi, bu hizmeti başlatın ve sonra da yeniden sağlamaktır.

Sinyal işleme - süreci doğal olarak SIGTERM yanıt. Varsayılan olarak bu, özellikle kendi sinyal işleyicisi yüklü yoksa ele alınmalıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Austin Evans

    Austin Evans

    5 AĞUSTOS 2007
  • OVERWERK

    OVERWERK

    6 Temmuz 2010
  • Xcode programming tutorials

    Xcode progra

    17 EYLÜL 2006