GNU/Linux >> Tutoriales Linux >  >> Linux

¿Trabajo cron para verificar si el script Php se está ejecutando, si no, entonces ejecutar?

Me pregunto si alguien podría indicarme la dirección correcta. Tengo poca experiencia trabajando con la línea de comandos de Linux y, recientemente, debido a varios factores en el trabajo, se me ha pedido que adquiera conocimientos.

Básicamente tengo dos php scripts que residen en un directorio en mi servidor. Para los fines de la aplicación, estos scripts deben ejecutarse continuamente. Actualmente lo implemento de esta manera:

nohup sh -c 'while true; do php get_tweets.php; done' >/dev/null &

y

nohup sh -c 'while true; do php parse_tweets.php; done' >/dev/null &

Sin embargo, he notado que, a pesar del ciclo infinito, los scripts se detienen periódicamente y me veo obligado a reiniciarlos. No estoy seguro de por qué, pero lo hacen. Eso me ha hecho considerar la posibilidad de un CRON trabajo que comprueba si se están ejecutando y si no lo están, ejecútelos/reinícielos.

¿Alguien podría proporcionarme información sobre cómo hacer esto?

Respuesta aceptada:

Me gustaría ampliar la respuesta de Davidann ya que eres nuevo en el concepto de un trabajo cron. Cada sistema UNIX o Linux tiene un crontab almacenado en alguna parte. El crontab es un archivo de texto sin formato. Considere lo siguiente:(De Gentoo Wiki en Cron)

#Mins  Hours  Days   Months  Day of the week
10     3      1      1       *       /bin/echo "I don't really like cron"
30     16     *      1,2     *       /bin/echo "I like cron a little"
*      *      *      1-12/2  *       /bin/echo "I really like cron"

Este crontab debe hacer eco de "Realmente me gusta cron" cada minuto de cada
hora de cada día cada dos meses. Obviamente, solo harías eso
si realmente te gustara cron. El crontab también repetirá "Me gusta cron un poco
" a las 16:30 todos los días en enero y febrero. También hará eco
"Realmente no me gusta cron" a las 3:10 el 1 de enero.

Siendo nuevo en cron, probablemente quiera comentar las columnas destacadas para saber para qué se usa cada columna. Todas las implementaciones de Cron que conozco siempre han sido de este orden. Ahora fusionando la respuesta de Davidann con mi archivo comentado:

#Mins  Hours  Days   Months  Day of week
  *     *      *      *       *   lockfile -r 0 /tmp/the.lock && php parse_tweets.php; rm -f /tmp/the.lock

* * * * * lockfile -r 0 /tmp/the.lock &&php get_tweets.php; rm -f /tmp/el.bloqueo

Si no se pone ningún valor en cada columna, el valor predeterminado es:
Cada minuto de cada hora de cada día de cada mes durante toda la semana, –> Cada minuto durante todo el año.

Relacionado:Linux:¿se ejecutará un ejecutable de Linux compilado en un "sabor" de Linux en otro diferente?

Como afirma Davidann, el uso de un archivo de bloqueo garantiza que solo se ejecute una copia del intérprete de php, php parse_tweets.php es el comando para "ejecutar" el archivo, y el último bit de la línea eliminará el archivo de bloqueo para estar listo para la próxima ejecución. No me gusta eliminar un archivo cada minuto, pero si este es el comportamiento que necesita, es muy aceptable. Escribir y reescribir en el disco es solo una preferencia personal


Linux
  1. Ejecute el trabajo cron solo si aún no se está ejecutando

  2. ¿Cómo configurar un trabajo cron para ejecutar un ejecutable cada hora?

  3. Ejecutar script de shell en paralelo

  4. Ejecutar un trabajo cron en Linux cada seis horas

  5. Cómo ejecutar un trabajo cron cada hora y 10 minutos

Cómo ejecutar un script de Python en PHP

¿El trabajo de Cron no se ejecuta?

¿Cómo configurar el trabajo cron para ejecutar un script PHP en cPanel?

¿Cómo puedo hacer que un trabajo cron se ejecute cada 30 minutos?

¿Cómo ejecutar cron job cada 3 meses?

Cómo configurar el trabajo cron para que se ejecute cada 2 días a las 11 p.m.