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:
sh /tmp/script.sh &