Verrou consultatif
Verrou consultatif (en anglais advisory lock) : verrou que seuls respectent les programmes qui le demandent explicitement ; il ne bloque pas un accès qui l'ignore, mais permet à des processus coopérants de ne pas s'exécuter en même temps.
Sous Linux, flock(1) s'appuie sur l'appel système flock(2) : le verrou est attaché à la description de fichier ouverte et libéré automatiquement quand le dernier descripteur se ferme, même si le processus est tué par SIGKILL. Pas de fichier .pid périmé à nettoyer. Dans une crontab, flock -n /var/lib/signalements/export.lock <commande> empêche deux exports de se chevaucher : -n échoue immédiatement (code 1, modifiable par -E) si le verrou est pris, -w <secondes> attend un temps borné. Le fichier de verrou va dans un répertoire qui appartient au compte de la tâche ; dans un répertoire ouvert à tous, n'importe qui pourrait le prendre avant vous et bloquer la tâche.
Une tâche lancée seulement par un minuteur systemd n'en a pas besoin : une unité ne peut pas tourner deux fois en même temps. Et flock ne vaut que pour une machine ; entre plusieurs, on prend par exemple un verrou consultatif PostgreSQL (pg_try_advisory_lock), à condition que le service le garantisse, ce qui n'est pas le cas de Serverless SQL.
Dans les cours
- Linux : administration système, leçon 10 : Planifier des tâches : cron et minuteurs
- Scaleway en pratique, leçon 4 : Redis managé et Serverless SQL
- Bash pour l'automatisation, leçon 10 : Signaux, nettoyage et verrous