В Ruby 1.9.x, что может быть простым способом либо не разрешить мой скрипт Ruby, либо дождаться окончания предыдущего экземпляра? **Как ограничить одновременные экземпляры одного и того же скрипта Ruby?
Я надеюсь избежать беспорядочной блокировки файлов или проверка таблицы процессов.
Есть ли что-то вроде global mutex или семафор уже в ядре? Я изучил родной Mutex, но это, похоже, применяется только к потокам в рамках одного процесса Ruby, а не к различным процессам.
** Впоследствии я мог бы добавить функции тайм-аута или ограничить N экземплярами, или попытаться использовать более одной глобальной блокировки (по одному на общесистемный ресурс, который должен иметь только один экземпляр).
Я уже переношу большую часть своих Ruby с помощью скриптов Bash, которые сами используют код типа '[-z" $ (pidof -x -o% PPID -o $$ $ {0 ## * /}) "] || exec echo "$ (date) $ 0: $$ уже пахнет PID: $ (pidof -x $ 0), ... bye !!", однако это служит другим целям. Еще лучшее решение, уже содержащееся в Ruby, заключается в блокировке любого фиксированного файла для записи, например. '/ TMP/scriptname.rb.lock'. При выходе или даже при сбое моего кода (который часто вызывает исключения) система очистит эту блокировку. Я просто займусь этим взломом, пока не будет чистого, родного интерфейса с глобальными семафорами, и мне все равно понадобится. – Marcos