¿Cronjob no puede ejecutar smartctl?

¿Cronjob no puede ejecutar smartctl?

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 esperada.

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é?

Respuesta1

La solución fue usar /usr/sbin/smartctlen lugar de smartctlen el script, solo así el cronjob podría ejecutar este comando.

Respuesta2

Al utilizar un crontab, la mayor parte del entorno habitual configurado para el inicio de sesión de un usuario normal está ausente o reducido (a menos que lo configure), cuando el script se ejecuta automáticamente mediante cron.

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

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

  • Si desea recibir (por correo electrónico) la salida estándar y también la de error, solo agréguela 2>&1al comando en el crontab
  • Si lo hacesnodesea recibir cualquiera de los resultados del comando crontab (por correo electrónico), agregue> /dev/null 2>&1

información relacionada