Задание Cron не выполняет сценарий оболочки - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу создать скрипт оболочки, который будет запускаться каждую минуту заданием 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 голосов
/ 25 сентября 2018

Установите переменную $ DISPLAY перед вызовом Zenity.

export DISPLAY=:0   

Понимание переменной DISPLAY linux

...