ó
#R__c           @   s|   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d d d „  ƒ  YZ d e f d „  ƒ  YZ d d	 d „  ƒ  YZ d S(
   iÿÿÿÿNt   SignalHandlerc           B   s2   e  Z d Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s   |  j  t | | ƒ f 7_  d  S(   N(   t   SIGNALSt	   SigAction(   t   selft   signumt   callback(    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt   register   s    c         C   s   |  j  S(   N(   R   (   R   (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt
   getActions   s    c         C   s   d s t  d |  ƒ ‚ d  S(   Ni    s5   You must define a handler(signum, frame) method in %s(   t   AssertionError(   R   R   t   frame(    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt   handler   s    c         C   s   d |  j  j S(   Ns
   <Class:%s>(   t	   __class__t   __name__(   R   (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt   __repr__   s    (    (   R   t
   __module__R   R   R   R
   R   (    (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyR    	   s
   			R   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s,   | |  _  | |  _ t j |  j  |  j ƒ d  S(   N(   R   R   t   signalR
   (   R   R   R   (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt   __init__   s    		c         C   s   |  j  ƒ  d  S(   N(   R   (   R   R   R	   (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyR
   "   s    c         C   s   d |  j  j |  j f S(   Ns   <Class:%s signal:%s>(   R   R   R   (   R   (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyR   %   s    (   R   R   R   R
   R   (    (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyR      s   		t   Daemonc           B   sh   e  Z d  d  d  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z i  Z d „  Z	 d „  Z
 d	 „  Z RS(
   s	   /dev/nullc         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   t   stdint   stdoutt   stderrt   pidfile(   R   R   R   R   R   (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyR   +   s    			c         C   s   | |  _  d  S(   N(   t   sigDict(   R   t   sigdict(    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt   metaInit1   s    c         C   sõ  y, t  j ƒ  } | d k r+ t j d ƒ n  Wn@ t k
 rn } t j j d | j | j f ƒ t j d ƒ n Xt  j	 d ƒ t  j
 ƒ  t  j d ƒ y, t  j ƒ  } | d k r¾ t j d ƒ n  Wn@ t k
 r} t j j d | j | j f ƒ t j d ƒ n Xt j j ƒ  t j j ƒ  t |  j d ƒ } t |  j d ƒ } t |  j d d ƒ } t  j | j ƒ  t j j ƒ  ƒ t  j | j ƒ  t j j ƒ  ƒ t  j | j ƒ  t j j ƒ  ƒ t j |  j ƒ t t  j ƒ  ƒ } t |  j d ƒ j d	 | ƒ d
 S(   sÒ   
        do the UNIX double-fork magic, see Stevens' "Advanced 
        Programming in the UNIX Environment" for details (ISBN 0201563177)
        http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
        i    s   fork #1 failed: %d (%s)
i   t   /s   fork #2 failed: %d (%s)
t   rs   a+s   w+s   %s
N(   t   ost   forkt   syst   exitt   OSErrorR   t   writet   errnot   strerrort   chdirt   setsidt   umaskR   t   flusht   fileR   t   dup2t   filenot   atexitR   t   delpidt   strt   getpidR   (   R   t   pidt   et   sit   sot   se(    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt	   daemonize4   s8     
 c         C   s   t  j |  j ƒ d  S(   N(   R   t   removeR   (   R   (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyR+   a   s    c         C   s>   t  ƒ  } x. t |  j ƒ D] } | j | |  j | ƒ q Wd  S(   N(   R    t   iterR   R   (   R   t   assigneet   i(    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt   signalAssignd   s    	c         C   s§   y8 t  |  j d ƒ } t | j ƒ  j ƒ  ƒ } | j ƒ  Wn t k
 rQ d } n X| r… d } t j	 j
 | |  j ƒ t j d ƒ n  |  j ƒ  |  j ƒ  |  j ƒ  d S(   s"   
        Start the daemon
        R   s2   pidfile %s already exist. Daemon already running?
i   N(   R'   R   t   intt   readt   stript   closet   IOErrort   NoneR   R   R    R   R3   R8   t   run(   R   t   pfR.   t   message(    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt   starti   s    


c         C   s!  y8 t  |  j d ƒ } t | j ƒ  j ƒ  ƒ } | j ƒ  Wn t k
 rQ d } n X| sy d } t j	 j
 | |  j ƒ d Sy* x# t j | t j ƒ t j d ƒ q Wnw t k
 r} t | ƒ } | j d ƒ d k rt j j |  j ƒ rt j |  j ƒ qqt | ƒ GHt j d ƒ n Xd S(   s!   
        Stop the daemon
        R   s/   pidfile %s does not exist. Daemon not running?
Ngš™™™™™¹?s   No such processi    i   (   R'   R   R9   R:   R;   R<   R=   R>   R   R   R    R   t   killR   t   SIGTERMt   timet   sleepR   R,   t   findt   patht   existsR4   R   (   R   R@   R.   RA   t   err(    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt   stop   s*    
c         C   s   |  j  ƒ  |  j ƒ  d S(   s$   
        Restart the daemon
        N(   RK   RB   (   R   (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt   restart    s    
c         C   s	   d GHd  S(   Nt   dummy(    (   R   (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyR?   §   s    (   R   R   R   R   R3   R+   R8   RB   R   RK   RL   R?   (    (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyR   (   s   		-					(    (    (   R   R   RE   R*   R   R    R   R   (    (    (    s2   /var/www/html/amocrm/testDaemon/PyDaemon/daemon.pyt   <module>   s   