
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.sh
macht 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.sh
enthä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/smartctl
stattdessen 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 PATH
oder 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>&1
dem 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