Varias ejecuciones en shell-cripting...

Estoy tratando de implementar un shell-script que sea ejecutado por un cron, de tal forma que al ejcutarse si existe más de una instancia o ejecuciones del mismo, no vuelva a iniciar hasta tanto haya terminado su primera ejecución.
Aplicación: imaginemos que tenemos que hacer un backup de por directorio, mi script se ejecuta cada cinco minutos vía el cron, pero debido a que en algún momento hay mucho trafico de información, mi maquina se sobrecarga y dura más de los cinco minutos en realizar el backup, ¿cómo evitar que vuelva a ser ejecutado hasta tanto no termine su primera ejecución de modo que no se cree una cola de procesos del mismo script?
A manera de ejemplo:
#!/bin/bash
if [[ `ps -ef | grep $0 | grep -v $$ | wc -l` -gt 1 ]]; then
 exit -1
fi
for dir in `ls /`
 do
   cd ${dir}
   ls -ltr
   cd ..
   du -sh ${dir}
Done
¿Se te ocurre otro método mejor a este? Que opinas si lanzo un daemon que lo monitoree, ¿cómo seria?
No se por que en unix no me funciona si lanzo el mismo proceso en paralelo se ejecuta, pero en linux no, en linux el hace justo lo que quiero..

1 Respuesta

Respuesta
1
Podrías guardar el PID del script en un fichero temporal, de manera que a cada ejecución lo primero que haga es que compruebe si existe este fichero, si existe, que salga del script, y si no existe, que ejecute el código. Al final del script habría que eliminar ese fichero. Por ejemplo:
#!/bin/bash
if [ -f /tmp/script.lock ]; then
 exit -1
fi
echo $$ > /tmp/script.lock
for dir in `ls /`
    do
        cd ${dir}
        ls -ltr
        cd ..
        du -sh ${dir}
Done
rm /tmp/script.lock
De esta manera también tendrías el PID del script en caso de que quisieras controlarlo o "matarlo" con un kill

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas