
He escrito un script para monitorear un servicio específico en mi VPS. Ese servicio (clamd.amavisd) tiende a encontrarse inesperadamente inactivo y, cuando lo hace, mi servicio de correo electrónico básicamente se detiene.
Utilizo las siguientes instrucciones en el script:
STATUS_QUERY_RESULT_STRING=$(service $SERVICE_NAME status)
El problema es que, cuando se ejecuta desde la terminal, el script recibe algo en esa variable (lo he repetido en un archivo para saberlo) pero desafortunadamente para mí, cuando se ejecuta en un trabajo cron, la variable está vacía.
Es obvio que estoy haciendo algo mal. ¿Hay algún factor que no estoy teniendo en cuenta?
Respuesta1
ABSOLUTAMENTE todo desde lo que ejecuta cron
debe tener rutas absolutas porque cron
usar una parte mínima de variables de entorno
STATUS_QUERY_RESULT_STRING=$(/full/path/to/service $SERVICE_NAME status)
De hecho, puede configurar en su script las RUTAS más importantes que necesita como
PATH=/bin:/usr/local/sbin
pero si algún día no descubre que, por ejemplo, lo esperado ls
es en realidad la caída de un hacker malicioso, utilice siempre rutas absolutas.
Asigne al comienzo de su script que está dispuesto a usar algo así.
CAT='/bin/cat'
LS='/bin/ls'
y usarlo como
$LS -la /some/path
$CAT /etc/passwd