¿Cronjob no puede ejecutar smartctl?

Aug 31 2020

Tengo un cronjob instalado (Ubuntu 16) que se ejecuta con el usuario root. Entonces en

sudo crontab -e

Tengo la siguiente entrada:

10 5 * * mon /home/userA/raidchecker.sh

Y el guión raidchecker.shhace esto:

#!/bin/sh
mail=`which mail`
rec="[email protected] [email protected]"
now=$( date +%Y%m%d-%H%M-%S ) mdstat=$( cat /proc/mdstat )
details=$( /sbin/mdadm --detail /dev/md2 ) diskusg=$( df -kh )
disk1=$( smartctl -A /dev/sda | grep Realloc | grep Sector ) disk2=$( smartctl -A /dev/sdb | grep Realloc | grep Sector )
disk1f=$( smartctl -A /dev/sda ) disk2f=$( smartctl -A /dev/sdb )
buddyinfo=$( cat /proc/buddyinfo | grep Normal ) echo "Check from $now\n\n=================\nMemory Fragmentation:\n$buddyinfo\n\nAll partitions:\n\n$mdstat\n\n=================\nData Partition:\n\n$details\n\n=================\nDisk Usage:\n$diskusg\n\n=================\nSMARTCTL:\n\nData Disk /dev/sda and sdb:\n$disk1\n$disk2\n\nFull Reports:\nDisk1:\n$disk1f\n\nDisk2:\n$disk2f" | $mail -s "Check from $now" $rec

Cuando ejecuto el script manualmente desde el shell, ./raidchecker.shel correo electrónico contiene toda la información como se esperaba.

Cuando el cronjob ejecuta el script, los parámetros disk1, disk2, disk1f y disk2f están vacíos (no contienen ningún dato).

¿Por qué?

Respuestas

1 e2-e4 Aug 31 2020 at 19:06

El uso de un crontab, la mayor parte del conjunto entorno habitual, por un inicio de sesión de usuario normal está ausente o reducida (a menos que establezca ella), cuando el script se ejecuta automáticamente por cron.

Sin duda, es mejor proporcionar una PATHruta relevante o la ruta absoluta a todos los comandos.

Siempre pruebe un crontab (estableciendo una hora un par de minutos después de la hora actual).

  • Si desea recibir (por correo electrónico) el estándar y también la salida de error, solo agregue 2>&1al comando en el crontab
  • Si no desea recibir ninguno de los resultados del comando crontab (por correo electrónico), agregue > /dev/null 2>&1
bzero Aug 31 2020 at 16:10

La solución fue usar en /usr/sbin/smartctllugar de smartctlen el script, solo de esta manera el cronjob podría ejecutar este comando.