2014-09-02 47 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