Tengo un script en cron para verificar memcached y reiniciarlo si no funciona. Por alguna razón no está funcionando. Script, con permisos:
-rwxr-xr-x 1 root root 151 Aug 28 22:43 check_memcached.shEntrada crontab:
*/5 * * * * /home/mysite/www/check_memcached.sh 1> /dev/null 2> /dev/nullContenido del guión:
#!/bin/sh ps -eaf | grep 11211 | grep memcached if [ $? -ne 0 ]; then service memcached restart else echo "eq 0 - memcache running - do nothing" fiFunciona bien si lo ejecuto desde la línea de comandos, pero anoche memcached falló y no se reinició desde cron. Puedo ver que cron lo ejecuta cada 5 minutos.
¿Qué estoy haciendo mal?
¿Necesito usar lo siguiente en lugar del reinicio de memcached de servicio?
/etc/init.d/memcached restartTengo otro script que verifica para asegurarse de que mi instancia de lighttpd se esté ejecutando y funcione bien. Funciona un poco diferente para verificar que se está ejecutando, pero usa la llamada init.d para reiniciar las cosas.
Editar - Resolución: El uso de /etc/init.d/memcached restart resolvió este problema.
Lo que suele causar problemas crontab son las rutas de comandos. En la línea de comandos, las rutas a los comandos ya están ahí, pero en cron a menudo no lo están. Si este es su problema, puede resolverlo agregando la siguiente línea en la parte superior de su crontab:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binEsto le dará a cron rutas explícitas para buscar los comandos que ejecuta su secuencia de comandos.
Además, su shebang en su guión es incorrecto. Necesita ser:
#!/bin/bashSospecho que el problema está en el grep 11211 : no está claro el significado del número y es posible que grep no coincida con el proceso deseado.
Creo que necesita registrar las acciones de este script, luego verá lo que realmente está sucediendo.
#!/bin/bash exec >> /tmp/cronjob.log 2>&1 set -xv cat2 () { tee -a /dev/stderr; } ps -ef | cat2 | grep 11211 | grep memcached if [ $? -ne 0 ]; then service memcached restart else echo "eq 0 - memcache running - do nothing" fi exit 0 La salida set -xv se captura en un archivo de registro en /tmp . El cat2 copiará el stdin en el archivo de registro, para que pueda ver sobre qué está actuando grep .
Guarde el siguiente código como check_memcached.sh
#!/bin/bash MEMCACHED_STATUS=`systemctl is-active memcached.service` if [[ ${MEMCACHED_STATUS} == 'active' ]]; then echo " Service running.... so exiting " exit 1 else service memcached restart fiY puedes programarlo como cron.