У меня есть скрипт, предназначенный для работы с UPS Hat для Raspberry Pi 4b. Я использую 64-битный сервер Ubuntu 21.04. Когда я запускаю скрипт вручную из /home/user/ups.sh, он отлично работает. Однако после выполнения инструкций и создания файла rc.local я не могу заставить сценарий запускаться автоматически при загрузке. Я поместил скрипт в каталог /user/bin/ и сделал для него команду chmod +x.
#!/бин/баш
#GPIO17 (вход) используется для чтения текущего состояния питания.
#0 - нормальный (или питание от батареи включено вручную).
№1 - сбой питания, переключился на батарею.
эхо 17 > /sys/class/gpio/export;
эхо в > /sys/class/gpio/gpio17/direction;
#GPIO27 (вход) используется для индикации того, что ИБП подключен к сети
эхо 27 > /sys/class/gpio/export;
эхо в > /sys/class/gpio/gpio27/direction;
#GPIO18 используется для информирования UPS о том, что Pi все еще работает. После отключения питания этот вывод возвращается в состояние Hi-Z.
эхо 18 > /sys/class/gpio/export;
эхо-выход > /sys/class/gpio/gpio18/direction;
echo 0 > /sys/class/gpio/gpio18/value;
power_timer=0;
inval_power="0";
ups_online1="0";
ups_online2="0";
ups_online_timer="0";
пока правда
делать
# прочитать значение вывода GPIO27
# обычно ИБП переключает этот контакт каждые 0,5 с
ups_online1=$(cat /sys/class/gpio/gpio27/value);
сон 0,1;
ups_online2=$(cat /sys/class/gpio/gpio27/value);
ups_online_timer=$((ups_online_timer+1));
#переключено?
если (( "$ups_online1" != "$ups_online2" )); тогда
ups_online_timer=0;
фи
# сбросить все таймеры, если ИБП находится в автономном режиме более 3 с (переключение не обнаружено)
если (("$ups_online_timer" > 30));
тогда
эхо "$ups_online_timer";
ups_online_timer=30;
power_timer=0;
inval_power=0;
#echo "ИБП отключен. Выход";
#выход;
фи
# прочитать значение вывода GPIO17
inval_power=$(cat /sys/class/gpio/gpio17/value);
# эхо $inval_power;
если (( "$inval_power" == 1 )); тогда
power_timer=$((power_timer+1));
еще
power_timer=0;
фи
#Если питание не было восстановлено в течение 60 секунд
если (( "$power_timer" == 600 )); тогда
#эхо $power_timer;
эхо "Выключение..."
сон 2;
выключение системы; #выключить
выход;
фи
сделано
это то, что у меня есть в файле rc.local
#!/бин/ш -е
#
# rc.local
#
bash /usr/bin/ups.sh &
выход 0
Я искал Google в течение нескольких дней, пробовал файлы cron и systemd, но ничего не работает. Надеюсь, найдется добрая душа, у которой есть ответ. Спасибо.