Ubuntu
Cronjob 不能執行 smartctl?
我安裝了一個以 root 使用者執行的 cronjob(Ubuntu 16)。所以在
sudo crontab -e
我有以下條目:
10 5 * * mon /home/userA/raidchecker.sh
腳本
raidchecker.sh
會這樣做:#!/bin/sh mail=`which mail` rec="myemail@gmail.com anotheremail@gmail.com" 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為空(不包含任何數據)。
為什麼?
解決方案是使用
/usr/sbin/smartctl
而不是smartctl
在腳本中,只有這樣 cronjob 才能執行此命令。
使用 crontab,當腳本由
cron
.可以肯定的是,最好提供相關的
PATH
,或者提供所有命令的絕對路徑。始終測試 crontab(在目前時間後幾分鐘設置時間)。
- 如果您想(通過電子郵件)接收標準和錯誤輸出,只需添加
2>&1
到 crontab 中的命令- 如果您不想收到 crontab 命令的任何輸出(通過電子郵件),請添加
> /dev/null 2>&1