Trong Ruby 1.9.x, điều gì có thể là một cách đơn giản để không cho phép kịch bản Ruby của tôi chạy lại, hoặc chờ cho phiên bản trước đó kết thúc? **Làm thế nào để hạn chế các trường hợp đồng thời của cùng một tập lệnh Ruby?
Tôi hy vọng sẽ tránh được việc khóa tập tin lộn xộn hoặc quá trình kiểm tra bảng.
Có điều gì đó giống như global mutex hoặc semaphore đã có trong lõi không? Tôi đã nghiên cứu bản gốc Mutex nhưng điều đó dường như chỉ áp dụng cho các chủ đề trong một quá trình Ruby, không phải qua các quy trình khác nhau.
** Sau đó, tôi có thể thêm chức năng hết thời gian chờ hoặc giới hạn vào các phiên bản N hoặc tìm cách sử dụng nhiều khóa toàn cầu (mỗi tài nguyên trên toàn hệ thống chỉ nên có tối đa một phiên bản).
Tôi đã bọc hầu hết Ruby của tôi bằng các tập lệnh Bash mà chính họ sử dụng mã như '[-z" $ (pidof -x -o% PPID -o $$ $ {0 ## * /}) "] || exec echo "$ (ngày) $ 0: $$ đã có mùi PID: $ (pidof -x $ 0), ... bye !!" 'tuy nhiên phục vụ các mục đích khác. Một giải pháp thậm chí tốt hơn đã được chứa trong Ruby chính nó là khóa bất kỳ tập tin cố định để viết ví dụ. '/ tmp/scriptname.rb.lock'. Tại lối ra hoặc thậm chí nếu mã của tôi treo (mà nó thường làm tăng ngoại lệ) hệ thống sẽ xóa khóa đó. Tôi sẽ chỉ đi với hack đó cho đến khi có một giao diện thuần túy, thuần túy cho các semaphores toàn cầu - mà tôi sẽ có nhu cầu cho dù sao đi nữa. – Marcos