์๋ ํ์ธ์,
๋๋ watchdog์ ์ฌ์ฉํ์ฌ ํ์ผ ์์คํ ์ ์ ํ์ผ์ ๋ชจ๋ํฐ๋งํ๊ณ ์๋ ์ฒ๋ฆฌ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ์ค๋ ๋๊ฐ ํน์ ํ์ผ์ ์ก์ธ์คํ ์ ์๊ณ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค. watchdog์ ์ค๋ฅ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์๋๋ฉด ๋ค๋ฅธ ํ์ผ์ ๊ณ์ ๋ชจ๋ํฐ๋งํฉ๋๊น?
์๋๋ ์ญ์ถ์ ์ ์์ ๋๋ค.
ํค๋ฅด๋
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 530, in **bootstrap_inner
self.run()
File "/Users/X/Documents/code/envs/Y/lib/python2.7/site-packages/watchdog/observers/api.py", line 192, in run
self.queue_events(self.timeout)
File "/Users/X/Documents/code/envs/Y/lib/python2.7/site-packages/watchdog/observers/kqueue.py", line 703, in queue_events
new_snapshot)
File "/Users/X/Documents/code/envs/Y/lib/python2.7/site-packages/watchdog/observers/kqueue.py", line 548, in _queue_dirs_modified
self.queue_event(DirCreatedEvent(directory_created))
File "/Users/X/Documents/code/envs/Y/lib/python2.7/site-packages/watchdog/observers/kqueue.py", line 520, in queue_event
self._register_kevent(event.src_path, event.is_directory)
File "/Users/X/Documents/code/envs/Y/lib/python2.7/site-packages/watchdog/observers/kqueue.py", line 470, in _register_kevent
self._descriptors.add(path, is_directory)
File "/Users/X/Documents/code/envs/Y/lib/python2.7/site-packages/watchdog/observers/kqueue.py", line 257, in add
self._add_descriptor(KeventDescriptor(path, is_directory))
File "/Users/X/Documents/code/envs/Y/lib/python2.7/site-packages/watchdog/observers/kqueue.py", line 342, in __init**
self._fd = os.open(path, WATCHDOG_OS_OPEN_FLAGS)
OSError: [Errno 13] Permission denied: '/Users/X/Public/Y/FOLDER'
์ด๊ฒ์ ์ฝ๊ฑฐ๋ ๋์ดํ ์ ์๋ ํ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ํฌํจํ๋ ๋๋ ํฐ๋ฆฌ์ ๋ํ ๊ฐ์๋ฅผ ์ฒ์ ์ค์ ํ๋ ค๊ณ ํ ๋ inotify์๋ ์ํฅ์ ์ค๋๋ค.
๋ํ ์ฝ์ ๊ถํ์ด ์๋ ๊น๊ฒ ์ค์ฒฉ๋ ํ์ ๋๋ ํฐ๋ฆฌ๊ฐ ํฌํจ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ณด๊ธฐ ์ํด inotify๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
utility.execute()
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/djsupervisor/management/commands/supervisor.py", line 163, in run_from_argv
return super(Command,self).run_from_argv(argv)
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
output = self.handle(*args, **options)
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/djsupervisor/management/commands/supervisor.py", line 186, in handle
return method(cfg_file,*args[1:],**options)
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/djsupervisor/management/commands/supervisor.py", line 264, in _handle_autoreload
observer.start()
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/watchdog/observers/api.py", line 255, in start
emitter.start()
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/watchdog/utils/__init__.py", line 111, in start
self.on_thread_start()
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/watchdog/observers/inotify.py", line 121, in on_thread_start
self._inotify = InotifyBuffer(path, self.watch.is_recursive)
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/watchdog/observers/inotify_buffer.py", line 35, in __init__
self._inotify = Inotify(path, recursive)
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/watchdog/observers/inotify_c.py", line 187, in __init__
self._add_dir_watch(path, recursive, event_mask)
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/watchdog/observers/inotify_c.py", line 371, in _add_dir_watch
self._add_watch(full_path, mask)
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/watchdog/observers/inotify_c.py", line 385, in _add_watch
Inotify._raise_error()
File "/home/roger/.virtualenvs/fdw/local/lib/python2.7/site-packages/watchdog/observers/inotify_c.py", line 406, in _raise_error
raise OSError(os.strerror(err))
OSError: Permission denied
๊ทธ๋์, ์ด, ์ด ๋ฌธ์ ๋ 2011๋ ๋ถํฐ ์ด๋ ธ์ต๋๋ค. ์ด repo์ ์์ ์๊ฐ ๋ ์ด์ Watchdog์ ์ ์ง ๊ด๋ฆฌํ์ง ์์ต๋๊น? ๋๋ ๋ฐฉ๊ธ ์ด๊ฒ์ ๋ถ๋ช์ณค๋ค.
@gorakhargosh ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค.
์, ์ด ๋ฌธ์ ๋ ๊ฝค ์ค๋๋์์ต๋๋ค!
[...] watchdog์ ์ค๋ฅ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์๋๋ฉด ๋ค๋ฅธ ํ์ผ์ ๊ณ์ ๋ชจ๋ํฐ๋งํฉ๋๊น?
ํ์ฌ๋ก์๋ ๋น์ฌ๊ท์ ๊ฐ์์๋ฅผ ์์ฝํ๋ ๊ฒ์ด ์ต์ ์ ๋๋ค.
์ด๋ ์ฝ๋์ ์๋นํ ํฉ์ด์ ธ ์๋ ๊ฒ์ผ๋ก, ๊ฐ์์ ์์ฑ ์๊ฐ ์ฒ๋ฆฌ ๋ฌธ์ ์ด์ ์ด๋ฏธํฐ ์ฒ๋ฆฌ ๋ฌธ์ ์
๋๋ค. ๊ธ์ง๋ ์ก์ธ์ค๊ฐ ์ธ์ ๋ ์ง ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค( chmod
, chown
๋๋ SELinux ๋๊ตฌ ์ฌ์ฉ). ). API์์ (๋๋ฌ์ด ํดํน ์ธ์) ์ด๋ป๊ฒ ์ฌ๋ฐ๋ฅด๊ฒ ์์ ๋ ์ ์๋์ง์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น?
์๋ง๋ errno.EACCES
(#459๋ฅผ ์๊ฐ๋๊ฒ ํจ)๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ๋ถ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ์ฌ ์ฒ๋ฆฌ๋์ด์ผ ๋๋จธ์ง ๋๋ ํ ๋ฆฌ์ ๊ฐ์๋ฅผ ๊ธ์งํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์๋ ์ถฉ๋ถํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์๋ ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ญ๋๋ค. ์๋ํ์ง ์๋ ๋ ๋ค๋ฅธ ์ด๋ฒคํธ... ์ฌ์ฉ์๋ ๋๋ ํ ๋ฆฌ๊ฐ 700์ด๊ณ , ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฐ์๋ ํธ๋ฆฌ์ ๋ณต์ฌํฉ๋๋ค. ์ถฉ๋ํ์ง ์๊ณ ์ค๋ฅ๋ง ๋ฐ์ํฉ๋๋ค. chmod 755๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ์์น๋ ํ๋ก์ธ์ค๊ฐ ํธ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ ์ฝ์ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ต๋๋ค.
์๋ง๋ ์ผ์ข
์ os-error๋ฅผ ์ถ๊ฐ ์ด๋ฒคํธ๋ก ๋ง๋์๊ฒ ์ต๋๊น? ์ฌ์ฉ์๋ ๊ทธ๊ฒ์ผ๋ก ๋ฌด์์ ํ ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
์๋ง๋ ๊ฐ์ฅ ๊นจ๋ํ ๊ฒ์
๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ทธ๋์, ์ด, ์ด ๋ฌธ์ ๋ 2011๋ ๋ถํฐ ์ด๋ ธ์ต๋๋ค. ์ด repo์ ์์ ์๊ฐ ๋ ์ด์ Watchdog์ ์ ์ง ๊ด๋ฆฌํ์ง ์์ต๋๊น? ๋๋ ๋ฐฉ๊ธ ์ด๊ฒ์ ๋ถ๋ช์ณค๋ค.
@gorakhargosh ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค.