GNU/Linux >> Tutoriales Linux >  >> Linux

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

Usa flock . Es nuevo. Es mejor.

Ahora no tienes que escribir el código tú mismo. Vea más razones aquí:https://serverfault.com/a/82863

/usr/bin/flock -n /tmp/my.lockfile /usr/local/bin/my_script

Hago esto para un programa de cola de impresión que escribí, es solo un script de shell:

#!/bin/sh
if ps -ef | grep -v grep | grep doctype.php ; then
        exit 0
else
        /home/user/bin/doctype.php >> /home/user/bin/spooler.log &
        #mailing program
        /home/user/bin/simplemail.php "Print spooler was not running...  Restarted." 
        exit 0
fi

Se ejecuta cada dos minutos y es bastante eficaz. Tengo que enviarme un correo electrónico con información especial si por alguna razón el proceso no se está ejecutando.


Como han dicho otros, escribir y verificar un archivo PID es una buena solución. Aquí está mi implementación bash:

#!/bin/bash

mkdir -p "$HOME/tmp"
PIDFILE="$HOME/tmp/myprogram.pid"

if [ -e "${PIDFILE}" ] && (ps -u $(whoami) -opid= |
                           grep -P "^\s*$(cat ${PIDFILE})$" &> /dev/null); then
  echo "Already running."
  exit 99
fi

/path/to/myprogram > $HOME/tmp/myprogram.log &

echo $! > "${PIDFILE}"
chmod 644 "${PIDFILE}"

Linux
  1. Agregar una línea a un archivo solo si aún no existe

  2. Linux:Ejecutar trabajo cron en primer plano

  3. ¿Cómo configurar el trabajo CRON para que se ejecute cada 10 segundos en Linux?

  4. el trabajo cron ocasionalmente no se ejecuta

  5. ¿Cómo ejecutar cron job cada 3 meses?

Cómo ejecutar un trabajo cron en días específicos de la semana

Cómo configurar y ejecutar un cron en cPanel

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

trabajo cron para ejecutar en el entorno virtual conda

No ejecute el trabajo cron si ya se está ejecutando

¿Cómo ejecutar el trabajo cron en una hora específica todos los días?