Crear un loop con Bash

    Hace unos dias tuvimos un “problema” en el que procesos ejecutados en un equipo se quedaban en modo sleep como el siguiente:

    [node01].root:~ # ps alx | grep DEV
    4     0  37396  37322  20   0 171460  1904 do_wai S    ?          0:00 su - xxxxx -c /scripts/files/.script/.tmp/DEV.sh A09
    4   800  37402  37396  20   0 117272  2012 iterat Ds   ?          0:02 /bin/ksh /scripts/files/.script/.tmp/DEV.sh
    0  1076  39751 279639  20   0 114880  1008 pipe_w S+   pts/4      0:00 grep --color=auto DEV

    En concreto, un proceso que ejecuta un script planificado se ejecuta de madrugada (y no íbamos a estar mirando la pantalla toda la noche) por lo que se creó un automatismo que nos permitiría monitorizar su ejecución justo en el momento de aparecer en el equipo.

    #!/bin/bash
    
    PATRON='DEV'
    FILE='/tmp/0123456'
    ESTADO='iterat'
    
    touch ${FILE}
    
    while true; do
      DATE=$(date +%d%m%Y%H%M%S)
      /usr/bin/ps alx | grep ${PATRON} | grep ${ESTADO}
      if [ $? -eq 0 ]; then
        echo "${DATE} - FOUND OK" >> ${FILE}
        echo . >> ${FILE}
        top -n 1 >> ${FILE}
        echo . >> ${FILE}
        /usr/bin/ps alx | grep ${PATRON} >> ${FILE}
        echo . >> ${FILE}
        PID=`ps -ef | grep {PATRON}| grep -v grep | awk '{print $2}'`
        /usr/bin/lsof -p ${PID} > ${FILE}
        /sbin/sosreport --batch --all-logs --verify --tmp-dir=/tmp/sosreport
        sleep 2
      else
        echo "${DATE} - FOUND KO" > ${FILE}
        exit
     fi
    done

    y para ejecutarlo, recordar que se debe ejecutar en background:

    Leave a Reply

    Your email address will not be published. Required fields are marked *