Recentemente un mio collega doveva eseguire più processi paralleli su un server (circa 20 nel nostro caso specifico), ogni processo faceva delle “cose”, e questo può richiedere un tempo più lungo o più corto rispetto agli altri, una volta che un processo termina il suo compito deve leggere da un file di testo la prima riga che indica l’ID di un nuovo lavoro, rimuove tale ID dalla parte superiore del file di testo e inizia ad elaborarlo.
Problema: su un lungo periodo (una elaborazione con più di 50K ID) capita “spesso” che 2 processi terminano nello stesso tempo e così entrambi hanno lo stesso ID causando problemi a tutto il processo, si è cercato di utilizzare un file di lock semplice facendo un “touch” quando il processo apriva il file con l’elenco di ID, ma sembra che questa operazione è troppo lento e abbiamo avuto ancora qualche caso di concorrenza fallito.
La soluzione è stata utilizzare la funzione di bash flock
Continue reading »