Cronjob 无法执行smartctl?

Cronjob 无法执行smartctl?

我安装了一个 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

当我从 shell 手动执行脚本时,./raidchecker.sh电子邮件包含预期的所有信息。

当cronjob执行脚本时,参数disk1、disk2、disk1f、disk2f为空(不包含任何数据)。

为什么?

答案1

解决方案是在脚本中使用/usr/sbin/smartctl而不是,只有这样 cronjob 才能执行该命令。smartctl

答案2

使用 crontab 时,当脚本自动运行时,为常规用户登录设置的大多数常用环境都会消失或减少(除非您设置它)cron

为确保万无一失,最好提供相关的PATH,或者给出所有命令的绝对路径。

总是测试 crontab(设置当前时间后几分钟的时间)。

  • 如果您想通过电子邮件接收标准和错误输出,只需2>&1在 crontab 中添加命令即可
  • 如果你不是想要接收 crontab 命令的任何输出(通过电子邮件),请添加> /dev/null 2>&1

相关内容