inotify và parallel trên RPi

Câu lệnh sau đây chờ mãi không có output gì sau khi đổi tên file bằng lệnh mv trong thư mục /mnt/d/test

inotifywait -m -e MOVED_FROM,MOVED_TO,CREATE,DELETE --format %w%f***%e /mnt/d/test | parallel -u echo

Tuy rằng mỗi lệnh hai bên pipe | đều chạy bình thường

Nếu không lọc event thì câu lệnh trên cho output tức thì

inotifywait -m --format '%w%f***%e' /mnt/d/test | parallel -u echo

Vậy vấn đề ở đâu? Tôi mất cả ngày để gỡ rối.

Bình thường câu lệnh parallel chạy với tham số mặc định j100%, nghĩa là chờ đủ số tham số dòng lệnh bằng với số core CPU thì mới bàn giao cho câu lệnh echo để thi hành.

RPi có 4 core nên parallel chờ cho đủ 4 tham số dòng lệnh.

Tuy nhiên lệnh mv chỉ cho ra 2 event MOVED_FROMMOVE_TO nếu ta lọc event như trên, nghĩa là chỉ có 2 tham số dòng lệnh. Nhưng nếu không lọc event thì lệnh mv cho ra 4 event (gồm cả những event cập nhật thư mục) nên kết quả câu lệnh được nhìn thấy ngay.

Sửa lại để parallel cho chạy echo mỗi khi có 1 tham số dòng lệnh

inotifywait -m --format '%w%f***%e' /mnt/d/test | parallel -j1 -u echo

Comments Off on inotify và parallel trên RPi

Filed under Software

Comments are closed.