Cronjob이 smartctl을 실행할 수 없나요?

Cronjob이 smartctl을 실행할 수 없나요?

루트 사용자로 실행되는 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

쉘에서 스크립트를 수동으로 실행하면 ./raidchecker.sh이메일에 예상한 대로 모든 정보가 포함됩니다.

cronjob이 스크립트를 실행할 때 매개변수 disk1, disk2, disk1f 및 disk2f는 비어 있습니다(데이터가 포함되어 있지 않음).

왜?

답변1

해결책은 스크립트 /usr/sbin/smartctl대신에 cronjob이 이 명령을 실행할 수 있는 방법을 사용하는 것이었습니다.smartctl

답변2

crontab을 사용하면 스크립트가 cron.

확실히 하려면 관련 을 제공 PATH하거나 모든 명령에 절대 경로를 제공하는 것이 좋습니다.

항상 crontab을 테스트하십시오(현재 시간보다 몇 분 후에 시간을 설정하십시오).

  • 표준 및 오류 출력을 (이메일로) 받으려면 2>&1crontab의 명령에만 추가하십시오.
  • 만약 당신이~ 아니다crontab 명령의 출력을 (이메일로) 받으려면 다음을 추가하십시오.> /dev/null 2>&1

관련 정보