Я знаю, что это старая версия, но для всех, кто интересуется, есть неблокирующая константа, которую вы можете передать стаду, чтобы она возвращалась вместо блокировки.
File.new("/tmp/foo.lock").flock( File::LOCK_NB | File::LOCK_EX )
Обновление для slhck
flock
вернет true, если этот процесс получил блокировку, иначе false. Таким образом, чтобы убедиться, что одновременно запущен только один процесс, вам нужно просто попытаться получить блокировку и выйти, если вы не смогли этого сделать. Это так же просто, как поставить exit unless
перед строкой кода, которую я имею выше:
exit unless File.new("/tmp/foo.lock").flock( File::LOCK_NB | File::LOCK_EX )