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

シェルからスクリプトを手動で実行すると、./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

関連情報