리눅스 python-daemon 오류
간단한 파이썬 데몬을 python-daemon 패키지를 설치해서 작성했는데, 아래와 같은 오류가 발생했다.
파이썬 virtualenv 환경에서 스크립트를 작성했다.
File "xipamd.py", line 92, indaemon_runner = runner.DaemonRunner(d) File "/home/snowfox/venv/lib/python3.6/site-packages/daemon/runner.py", line 114, in __init__ self._open_streams_from_app_stream_paths(app) File "/home/snowfox/venv/lib/python3.6/site-packages/daemon/runner.py", line 133, in _open_streams_from_app_stream_paths self.daemon_context.stdout = open(app.stdout_path, 'w+t') io.UnsupportedOperation: File or stream is not seekable.
/home/snowfox/venv/lib/python3.6/site-packages/daemon/runner.py를 수정한다.(파이썬 가상환경에서 설치된 파일임)
원래 파이썬 코드.
... def _open_streams_from_app_stream_paths(self, app): """ Open the `daemon_context` streams from the paths specified. :param app: The application instance. Open the `daemon_context` standard streams (`stdin`, `stdout`, `stderr`) as stream objects of the appropriate types, from each of the corresponding filesystem paths from the `app`. """ self.daemon_context.stdin = open(app.stdin_path, 'rt') self.daemon_context.stdout = open(app.stdout_path, 'w+t') self.daemon_context.stderr = open( app.stderr_path, 'w+t', buffering=0) ...
수정..
위 부분을 아래처럼 수정한다.
self.daemon_context.stdin = open(app.stdin_path, 'wb+', buffering=0) self.daemon_context.stdout = open(app.stdout_path, 'wb+', buffering=0) self.daemon_context.stderr = open( app.stderr_path, 'wb+', buffering=0)
일단 급한대로 실행은 되는데, 이 runner 를 이후 더 이상 지원하지 않을 예정이라 한다. 결국 다른 방법을 사용해야 한다는 것인가?
참고문서:
https://pagure.io/python-daemon/issue/8
https://stackoverflow.com/questions/37532479/python3-create-daemon