
У меня установлен cronjob (Ubuntu 16), который работает с пользователем root. Так что в
sudo crontab -e
У меня есть следующая запись:
10 5 * * mon /home/userA/raidchecker.sh
И скрипт raidchecker.sh
делает это:
#!/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
Когда я запускаю скрипт вручную из оболочки, ./raidchecker.sh
электронное письмо содержит всю ожидаемую информацию.
Когда cronjob выполняет скрипт, параметры disk1, disk2, disk1f и disk2f пусты (не содержат никаких данных).
Почему?
решение1
Решением было использовать /usr/sbin/smartctl
вместо smartctl
в скрипте, только так cronjob мог выполнить эту команду.
решение2
При использовании crontab большая часть обычного окружения, установленного для входа обычного пользователя, отсутствует или сокращена (если вы не настроили его), когда скрипт запускается автоматически cron
.
Для уверенности лучше либо указать соответствующий путь PATH
, либо указать абсолютный путь ко всем командам.
Всегда проверяйте crontab (устанавливая время на пару минут позже текущего времени).
- Если вы хотите получать (по электронной почте) стандартный вывод, а также вывод ошибок, просто добавьте
2>&1
к команде в crontab - Если ты это сделаешьнетхотите получать любые выходные данные команды crontab (по электронной почте), добавьте
> /dev/null 2>&1