Cron作业不执行Shell脚本

时间:2018-09-25 13:06:51

标签: bash shell cron

我想创建一个shell脚本,该脚本将由cron作业每分钟运行一次。脚本的工作将是通知我在不同条件下(取消)插入充电器:

  1. 当电池处于充电状态且已充满约80%时,它提醒我拔下电缆。

  2. 当电池处于放电状态并且已充满40%左右时,它提醒我将电缆插回去。

我的crontab文件:

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

* * * * * /home/aleksa/charge.sh
# newline 

我的/home/aleksa/charge.sh脚本:

#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

RESPONSE="$(upower -i /org/freedesktop/UPower/devices/battery_BAT0)"

#if percentage is around 40%, and state is discharging
if echo "${RESPONSE}" | grep -E '38%|39%|40%|41%|42%' && echo "${RESPONSE}" | grep -w 'discharging'
then zenity --notification --window-icon=update.png --text "Connect charger"; 
fi

#if percentage is around 80%, and state is charging
if echo "${RESPONSE}" | grep -E '78%|79%|80%|81%|82%' && echo "${RESPONSE}" | grep -w 'charging'
then zenity --notification --window-icon=update.png --text "Disconnect charger"; 
fi

我认为问题出在脚本中,因为我尝试了其他方法来检测问题出在哪里:

  1. 脚本独立于cron执行时有效
  2. cron作业有效-我已经通过每分钟将date命令响应附加到文件中来进行测试
  3. 我尝试过不声明RESPONSE变量,但仍然无法正常工作

1 个答案:

答案 0 :(得分:1)

在调用Zenity之前设置 $ DISPLAY 变量。

export DISPLAY=:0   

Understanding linux DISPLAY variable