Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

621
Vistas
¿Cómo ejecutar inotifywait continuamente y ejecutarlo como cron o deamon?

Creé un script de shell que usa inotifywait para detectar automáticamente los cambios de archivo en un directorio específico. Cuando se coloca un nuevo archivo PDF en el directorio, este script debe desactivarse y luego debe activar ocropus-parser para ejecutar algunos comandos en él. El código:

 #!/bin/sh inotifywait -m ~/Desktop/PdfFolder -e create -e moved_to | while read path action file; do #echo "The file '$file' appeared in directory '$path' via '$action'" # Check if the file is a PDF or another file type. if [ $(head -c 4 "$file") = "%PDF" ]; then echo "PDF found - filename: " + $file python ocropus-parser.py $file else echo "NOT A PDF!" fi done

Esto funciona bastante bien cuando ejecuto este script a través de la terminal con ./filenotifier.sh pero cuando reinicio mi Linux (Ubuntu 14.04) mi shell ya no se ejecutará y no se reiniciará después de un reinicio. Decidí crear un script de inicio que comienza en el momento del arranque (creo). Hice esto copiando el archivo filenotifier.sh a init.d :

 sudo cp ~/Desktop/PdfFolder/filenotifier.sh /etc/init.d/

Luego le di al archivo los derechos correctos:

 sudo chmod 775 /etc/init.d/filenotifier.sh

y finalmente agregué el archivo a update-rc.d :

 sudo update-rc.d filenotifier.sh defaults

Sin embargo, cuando reinicio y coloco un PDF en la carpeta ~/Desktop/PdfFolder , no sucederá nada y parece que el script no se apaga. Realmente no tengo experiencia con init.d , update-rc.d y deamon , así que no estoy seguro de qué está mal y si este es un buen enfoque o no.

Gracias, Yenthe

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

  • Al ser un script de inicio, debe agregar el encabezado LSB a su script, así:

     #!/bin/sh ### BEGIN INIT INFO # Provides: filenotifier # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Something # Description: Something else ### END INIT INFO inotifywait -m ...

    De esta manera, puede asegurarse de que su script se ejecute cuando todos los puntos de montaje estén disponibles (gracias a Required-Start: $remote_fs ). Esto es esencial si su directorio de inicio no está en la partición raíz.

  • Otro problema es que en su guión de inicio está usando ~ :

     inotifywait -m ~/Desktop/PdfFolder ...

    El ~ se expande al directorio de inicio del usuario actual. Los scripts de inicio se ejecutan como raíz, por lo que se expandirán a /root/Desktop/PdfFolder . Use ~<username> en su lugar:

     inotifywait -m ~yenthe/Desktop/PdfFolder ...

    (Suponiendo que su nombre de usuario sea yenthe ).

    O tal vez cambiar de usuario antes de comenzar (usando sudo ).

  • $file es el nombre base sin la ruta al directorio. Use "$path/$file" en sus comandos:

     "$(head -c 4 "$path/$file")" python ocropus-parser.py "$path/$file"

    Tal vez considere usar name en lugar de file , para evitar confusiones.

  • Si las cosas no funcionan, o si en general quieres investigar algo, recuerda usar ps , así:

     ps -ef | grep inotifywait

    ps le dirá, por ejemplo, si su secuencia de comandos se está ejecutando y si inotifywait se inició con los argumentos correctos.

  • Por último, pero no menos importante: use "$file" , no $file ; use "$(head -c 4 "$file")" , no $(head -c 4 "$file") ; use read -r , no read . ¡Estos consejos pueden ahorrarte muchos dolores de cabeza en el futuro!

over 4 years ago · Santiago Trujillo Denunciar

0

Para ello, los desarrolladores de inotify crearon incron . Es un demonio similar a cron que ejecuta scripts basados en cambios en un archivo/directorio observado en lugar de eventos de tiempo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda