flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
¿Cómo pasaría múltiples comandos flock
como en el ejemplo anterior?
Según tengo entendido, flock
toma diferentes indicadores (-x para exclusivo, -w para tiempo de espera), luego el archivo para bloquear y luego el comando para ejecutar. No estoy seguro de cómo pasaría dos comandos a esta función (establezca la variable con el contenido del archivo bloqueado y luego incremente este archivo).
Mi objetivo aquí es crear un incremento algo atómico para un archivo bloqueándolo cada vez que un script intenta acceder al counter.txt
archivo.
fuente
O puede agrupar un descriptor de archivo
Esto también tiene el beneficio de permitirle usar la variable de contador directamente, a diferencia de los enfoques basados en subshell.
fuente
exec {counterfd}
? Por sí solo, errores de Debiannot found
, pero devuelve 0 con la redirección. Muy raro.La
flock
herramienta es un poco difícil de usar y la página de manual es bastante corta. La página del manual proporciona tres formas de usar la herramienta:flock [options] <file|directory> <command> [command args]
flock [options] <file|directory> -c <command>
flock [options] <file descriptor number>
La forma en que está formulada esta pregunta definitivamente usaría la tercera forma de
flock
. Si va más abajo en la página del manual,flock
hay algunos ejemplos que muestran la sintaxis exacta para usar el tercer formulario:Agregué el
#!/bin/bash
.He utilizado con éxito esta forma de
flock
.fuente