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_FROM và MOVE_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