2016-07-21 7 views
0

Ich versuche, Uhren mit Python pyinotify hinzuzufügen und den Notifier zu dämonisieren.Wie stdout an Datei für pyinotify Daemonize anhängen?

Allerdings konnte ich feststellen, dass die Protokolldateien überschrieben werden nicht angehängt werden. Gibt es eine Möglichkeit, stdout und stderr anzufügen? Ich bin auf Linux OS.

dank

Antwort

0

bei the source Blick scheint es, als ob die Protokolle in O_WRONLY Modus geöffnet werden, weshalb Sie ist sehen, wie sie jedes Mal, wenn die Schleife aufrufen überschrieben werden:

def __daemonize(self, pid_file=None, stdin=os.devnull, stdout=os.devnull, 
       stderr=os.devnull): 
    """ 
    @param pid_file: file where the pid will be written. If pid_file=None 
        the pid is written to 
        /var/run/<sys.argv[0]|pyinotify>.pid, if pid_file=False 
        no pid_file is written. 
    @param stdin: 
    @param stdout: 
    @param stderr: files associated to common streams. 
    """ 
    if pid_file is None: 
     dirname = '/var/run/' 
     basename = os.path.basename(sys.argv[0]) or 'pyinotify' 
     pid_file = os.path.join(dirname, basename + '.pid') 

    if pid_file != False and os.path.lexists(pid_file): 
     err = 'Cannot daemonize: pid file %s already exists.' % pid_file 
     raise NotifierError(err) 

    def fork_daemon(): 
     # Adapted from Chad J. Schroeder's recipe 
     # @see http://code.activestate.com/recipes/278731/ 
     pid = os.fork() 
     if (pid == 0): 
      # parent 2 
      os.setsid() 
      pid = os.fork() 
      if (pid == 0): 
       # child 
       os.chdir('/') 
       os.umask(022) 
      else: 
       # parent 2 
       os._exit(0) 
     else: 
      # parent 1 
      os._exit(0) 

     fd_inp = os.open(stdin, os.O_RDONLY) 
     os.dup2(fd_inp, 0) 
     fd_out = os.open(stdout, os.O_WRONLY|os.O_CREAT, 0600) 
     os.dup2(fd_out, 1) 
     fd_err = os.open(stderr, os.O_WRONLY|os.O_CREAT, 0600) 
     os.dup2(fd_err, 2) 

    # Detach task 
    fork_daemon() 

    # Write pid 
    if pid_file != False: 
     flags = os.O_WRONLY|os.O_CREAT|os.O_NOFOLLOW|os.O_EXCL 
     fd_pid = os.open(pid_file, flags, 0600) 
     os.write(fd_pid, str(os.getpid()) + '\n') 
     os.close(fd_pid) 
     # Register unlink function 
     atexit.register(lambda : os.unlink(pid_file)) 

Es ist ein pull request geöffnet, um die Protokolle in O_APPEND Modus zu öffnen, aber es ist fast 8 Monate alt und der Autor hat nicht geantwortet.

Es sieht nicht wie es eine vernünftige Art und Weise ist die Protokolle zu diesem Zeitpunkt anzuhängen.

+0

Ok .thanks .. Ich werde die Protokolldatei mit Zeitstempeln vor dem Aufruf von Schleife umbenannt. – SKRP