Watchdog: OSError Tidak Dapat Ditangkap: Izin Ditolak

Dibuat pada 10 Okt 2011  ·  6Komentar  ·  Sumber: gorakhargosh/watchdog

Hai,

Saya menggunakan pengawas untuk memantau file baru di sistem file dan memicu pemrosesan otomatisnya. Apa yang terjadi adalah bahwa utas tidak memiliki akses ke file tertentu dan macet. Apakah ada cara untuk memberikan penangan kesalahan kepada pengawas? Atau terus memantau file lain?

Di bawah ini adalah contoh traceback.

Hernan

  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'
kqueue

Komentar yang paling membantu

Jadi, eh, masalah ini sudah dibuka sejak 2011. Apakah pemilik repo ini tidak lagi memelihara Watchdog? Saya juga baru saja mengalami ini.

Silakan komentar, @gorakhargosh

Semua 6 komentar

Ini juga berdampak pada inotify ketika pertama kali mencoba mengatur arloji di atas direktori yang kebetulan berisi subdirektori yang tidak dapat dibaca/didaftarkan.

Saya juga mendapatkan kesalahan ini menggunakan inotify untuk menonton direktori yang menyertakan sub-direktori yang sangat bersarang sehingga saya tidak memiliki izin untuk membacanya:

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

Jadi, eh, masalah ini sudah dibuka sejak 2011. Apakah pemilik repo ini tidak lagi memelihara Watchdog? Saya juga baru saja mengalami ini.

Silakan komentar, @gorakhargosh

Wah, masalah ini sudah cukup lama!

[...] Apakah ada cara untuk menyediakan penangan kesalahan kepada pengawas? Atau terus memantau file lain?

Untuk saat ini yang terbaik yang dapat Anda lakukan adalah menjadwalkan pengamat non-rekursif.

Itu adalah sesuatu yang cukup tersebar dalam kode, dan ini merupakan masalah penanganan waktu pembuatan pengamat dan masalah penanganan emitor , karena akses terlarang dapat terjadi kapan saja (dengan chmod , chown atau alat SELinux ). Apakah Anda tahu bagaimana itu bisa diperbaiki dengan benar di API (selain peretasan kotor)?

Mungkin errno.EACCES (yang mengingatkan saya pada #459) harus ditangani secara default dengan mengeluarkan beberapa peringatan, sehingga tidak melarang menonton direktori yang tersisa. Tapi sepertinya itu tidak cukup untuk menyelesaikan masalah ini.

Ini pada dasarnya membuat setiap kasus penggunaan di mana ada banyak pengguna tidak dapat digunakan. Acara lain yang tidak berfungsi... pengguna memiliki direktori 700 untuk mereka, mereka menyalin direktori ke pohon yang diawasi. Itu tidak akan crash, itu hanya memberikan kesalahan. chmod 755 jadi sekarang proses pengawas dapat membaca semua file di pohon. tidak.

mungkin hanya membuat semacam os-error sebagai acara tambahan? pengguna hanya dapat memutuskan apa yang harus dilakukan dengannya.
yang mungkin akan terbersih.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

alciomarhollanda picture alciomarhollanda  ·  5Komentar

Naatan picture Naatan  ·  3Komentar

JeromeHoen picture JeromeHoen  ·  6Komentar

AndreaCrotti picture AndreaCrotti  ·  3Komentar

bhargavrpatel picture bhargavrpatel  ·  3Komentar