Por ejemplo, hay un script mysql de respaldo periódico (cron), o un script rsync, si hay un accidente, el tiempo de ejecución es demasiado largo, es probable que el próximo ciclo de respaldo haya comenzado. El script para el ciclo actual aún no se ha ejecutado, obviamente no estamos dispuestos a que esto suceda.
De hecho, siempre que realices algunos cambios en el script, puedes evitar que se ejecute repetidamente.
# /bin /bashLOCK_NAME = "! /tmp/my.lock" si [[-e $ lock_name]]; thenecho " re-entrada, salida de " 1fi salida ### Colocación de la cerradura $ FileTouch LOCK_NAMEecho -n " Comenzó ... " ### Iniciar proceso normal ### Fin del proceso normal ### Eliminando lockrm -f $ LOCK_NAMEecho " Hecho. &Quot;
Cuando el script comienza a ejecutarse, Cree el archivo /tmp/my.lock. Si ejecuta este script nuevamente y descubre que existe my.lock, saldrá y eliminará el archivo cuando el script termine de ejecutarse.
En la mayoría de los casos, no hay nada de malo en hacer esto. Accidente 1) Si ejecuta este script dos veces al mismo tiempo, ambos procesos encontrarán que my.lock no existe y puede continuar ejecutándose. Accidente 2) Si el script se cierra inesperadamente durante la ejecución, no hay tiempo para eliminar el archivo my.lock, entonces es una tragedia.
Modifica de la siguiente manera:
#! /bin /bashLOCK_NAME = " /tmp/my.lock" if (set -o noclobber; echo " $$ " > " $ lock_name ") 2 > /dev /null; thentrap; INT TERM sALIDA ### comienza el flujo normal de ### termina flujo normal ### Extracción lockrm -f $ LOCK_NAMEtrap - 'rm -f " $ lock_name "; salida $?' INT PLAZO EXITelseecho " fallido para adquirir fichero de bloqueo: $ lock_name " echo " en Posesión de $ (cat $ lock_name) " 1fiecho salida de " Hecho "
set significado -o noclobber: < Br>
Si está configurado, bash no sobrescribe un archivo existente con los operadores de redirección >, > &, y < >.
Esto asegurará que my.lock solo pueda ser uno Se crea el proceso. Más fiable que el tacto.
trap puede capturar varias señales y luego procesarlas: INT se usa para controlar ctrl + c y cancelar la ejecución del script. TERM se utiliza para manejar kill -TERM pid. SALIR no está claro
Además, no es válido para kill -9. .
Recuerde que hace N años, en el grupo php, la gente de la hierba también hizo esta pregunta, la respuesta que dimos fue ps aux |
Grep nombre de archivo |
Wc -l, jaja, cierto 2.
Mono es un marco de desarrollo .NET de código abierto y multiplataforma. Soporte para sistemas Lin
Bajo Linux es un método de instalación de software regular, además de la forma binaria de distribuci
La función de un controlador de dispositivo .linux Kernel: se utiliza para administrar los recur
Linux2.6 los controladores de dispositivo se construyen sobre la base del modelo de dispositivo, por
Cómo agregar Nginx al servicio del sistema
Funciones recursivas para scripts de shell - atravesar directorios para operaciones
Cómo obtener la información de la placa base en el sistema Linux
Linux end contiene un proceso de palabra clave (método de proceso de eliminación por lotes)
Resolver falla de desconexión automática ssh
Herramienta de recuperación de código de hipertexto de Linux
Win8 cierra la sincronización en la nube y modifica la configuración personal
Añadir "Obtener permisos de administrador" en win7 clic derecho
Aprenda a usar la capacidad de partición de Windows Server 2003
Dos formas posibles de iniciar el Editor de directivas de grupo en Win10
El sistema Win7 elimina archivos sin entrar en la papelera de reciclaje
Leyenda de Hearthstone mano tarjeta grupo compartir cuelga escalera gastroscopo esclavo batalla
Controlador de la tarjeta de sonido de Windows7 no está completo cómo hacerlo
Cómo configurar QQ Pinyin como método de entrada de escritura a mano
Acelera la velocidad de previsualización de la barra de tareas de win7 诀窍