簡體   English   中英

如何將stdout附加到文件以pyinotify守護進程?

[英]How to append stdout to file for pyinotify daemonize?

我正在嘗試使用python pyinotify添加手表並守護通告程序。

notifier = pyinotify.Notifier(wm, handler)
notifier.loop(daemonize=True, pid_file='/tmp/pyinotifier.pid',
              stdout='/tmp/out.log', stderr='/tmp/error.log')

但是我發現,日志文件被覆蓋,沒有附加。 有沒有辦法附加stdoutstderr 我在Linux OS上。

謝謝

查看源代碼 ,看起來好像是在O_WRONLY模式下打開了日志,這就是為什么您每次調用循環都會看到它們被覆蓋的原因:

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))

打開了一個拉取請求 ,以O_APPEND模式打開日志,但是已經有將近8個月的時間了,作者沒有響應。

目前似乎沒有合理的方法來添加日志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM