代码之家  ›  专栏  ›  技术社区  ›  crazyeyes

crontab不会在我的mac上执行“ioreg”

  •  2
  • crazyeyes  · 技术社区  · 10 年前

    我想在我的mac上跟踪我的电池信息, 所以我给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
    

    为什么? 伊雷格牌手表 在crontab中不工作? 如果有人知道我的问题,请告诉我会发生什么。

    谢谢

    1 回复  |  直到 10 年前
        1
  •  4
  •   Gordon Davisson    10 年前

    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...