Cronjob kann Smartctl nicht ausführen?

Cronjob kann Smartctl nicht ausführen?

Ich habe einen Cronjob installiert (Ubuntu 16), der mit dem Root-Benutzer ausgeführt wird.

sudo crontab -e

Bei mir gibt es folgenden Eintrag:

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

Und das Skript raidchecker.shmacht Folgendes:

#!/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

Wenn ich das Skript manuell von der Shell aus ausführe, ./raidchecker.shenthält die E-Mail alle Informationen wie erwartet.

Wenn der Cronjob das Skript ausführt, sind die Parameter disk1, disk2, disk1f und disk2f leer (enthalten keine Daten).

Warum?

Antwort1

Die Lösung bestand darin, im Skript /usr/sbin/smartctlstattdessen zu verwenden smartctl. Nur so konnte der Cronjob diesen Befehl ausführen.

Antwort2

Bei Verwendung einer Crontab fehlen die meisten der üblichen Umgebungseinstellungen für eine normale Benutzeranmeldung oder sind reduziert (sofern Sie sie nicht festlegen), wenn das Skript automatisch ausgeführt wird cron.

Um sicherzugehen, ist es besser, entweder einen relevanten anzugeben PATHoder den absoluten Pfad zu allen Befehlen anzugeben.

Testen Sie immer eine Crontab (indem Sie eine Zeit ein paar Minuten nach der aktuellen Zeit einstellen).

  • Wenn Sie (per E-Mail) die Standard- und auch Fehlerausgabe erhalten möchten, fügen Sie 2>&1dem Befehl in der Crontab nur hinzu
  • Wenn Sie tunnichtWenn Sie die Ausgabe des crontab-Befehls per E-Mail erhalten möchten, fügen Sie hinzu> /dev/null 2>&1

verwandte Informationen