cronjob無法執行smartctl?

cronjob無法執行smartctl?

我安裝了一個以 root 使用者身分執行的 cronjob(Ubuntu 16)。所以在

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

相關內容