crontab没有执行'ioreg'在我的Mac上

时间:2014-09-02 11:43:52

标签: macos bash shell crontab

我想跟踪我的电池上的电池信息, 所以我将一个脚本文件分配给crontab,但它不起作用。

#!/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中工作? 请告诉我如果有人知道我的问题会发生什么。

感谢。

1 个答案:

答案 0 :(得分:3)

cron作业以非常小的环境运行,包括一个非常基本的PATH(只是/ usr / bin:/ bin)。但是ioreg在/ usr / sbin中,因此它不会被发现作为基于该PATH的命令。有三种简单的解决方案:

  1. 在crontab中设置PATH:

    PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
    */1 * * * * ~/getbattery.sh >> ~/batteryinfo.txt
    
  2. 在脚本中设置PATH:

    #!/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...