In Ruby 1.9.x, quale potrebbe essere un modo semplice per non consentire lo script di Ruby di essere eseguito di nuovo, o attendere il completamento dell'istanza precedente? **Come limitare le istanze concorrenti dello stesso script Ruby?
Spero di evitare il blocco file disordinato o controllo della tabella di processo.
C'è qualcosa come un global mutex o semaforo già nel nucleo? Ho studiato il codice nativo Mutex ma sembra che si applichi solo ai thread all'interno di un processo Ruby, non tra diversi processi.
** In seguito potrei aggiungere funzionalità di timeout o limite a istanze N o cercare di utilizzare più di un blocco globale (uno per risorsa a livello di sistema che dovrebbe avere solo un'istanza massima).
Ho già inserito la maggior parte dei miei Ruby con script Bash che usano loro stessi codice come '[-z" $ (pidof -x -o% PPID -o $$ $ {0 ## * /}) "] || exec echo "$ (data) $ 0: $$ odora già PID: $ (pidof -x $ 0), ... ciao !!" 'comunque questo serve ad altri scopi. Una soluzione ancora migliore già contenuta all'interno di Ruby è quella di bloccare qualsiasi file fisso per la scrittura, ad es. '/ Tmp/scriptname.rb.lock'. All'uscita o anche se il mio codice si arresta in modo anomalo (cosa che spesso genera eccezioni) il sistema cancellerà quel blocco. Vado con quel trucco fino a quando non ci sarà un'interfaccia nativa pulita ai semafori globali - di cui avrò comunque bisogno. – Marcos