
私は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>&1
crontabのコマンドに以下を追加するだけです。 - もし、するならないcrontabコマンドの出力を(電子メールで)受け取りたい場合は、
> /dev/null 2>&1