2014-09-02 135 views
2

我想跟蹤我的電腦上的電池信息, 因此,我將一個腳本文件分配給crontab,但它不起作用。crontab在我的mac上不執行'ioreg'

#!/bin/bash 
#getbattery.sh 
CURRENT_CAPACITY=$(ioreg -l -n AppleSmartBattery -r | grep CurrentCapacity | awk '{print $3}') 
MAX_CAPACITY=$(ioreg -l -n AppleSmartBattery -r | grep MaxCapacity | awk '{print $3}') 
CHARGE=$(echo $CURRENT_CAPACITY $MAX_CAPACITY | awk '{printf ("%i", $1/$2 * 100)}') 
echo "$CHARGE""% $(date) " 

-

#my crontab content: 
*/1 * * * * ~/getbattery.sh >> ~/batteryinfo.txt 

爲什麼名爲ioreg並不在crontab工作? 請告訴我,如果有人知道我的問題會發生什麼。

謝謝。

回答

3

cron作業使用非常小的環境運行,包括非常基本的PATH(只是/ usr/bin:/ bin)。但是ioreg在/ usr/sbin中,所以它不會作爲基於該PATH的命令找到。有三個簡單的解決辦法:

  1. 設置在crontab的路徑:

    PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin 
    */1 * * * * ~/getbattery.sh >> ~/batteryinfo.txt 
    
  2. 在您的腳本的路徑:

    #!/bin/bash 
    #getbattery.sh 
    PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin 
    CURRENT_CAPACITY=$(ioreg -l -n AppleSmartBattery -r | grep CurrentCapacity | awk '{print $3}') 
    # etc... 
    
  3. 使用名爲ioreg顯式路徑(和其他任何不在/ bin或/ usr/bin中的命令):

    #!/bin/bash 
    #getbattery.sh 
    CURRENT_CAPACITY=$(/usr/sbin/ioreg -l -n AppleSmartBattery -r | grep CurrentCapacity | awk '{print $3}') 
    # etc... 
    
+0

感謝您的幫助。 – crazyeyes 2014-09-03 01:19:27