Рейтинг:0

Хотя настоящий скрипт не запускается при загрузке

флаг ni

У меня есть скрипт, предназначенный для работы с 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, но ничего не работает. Надеюсь, найдется добрая душа, у которой есть ответ. Спасибо.

CyberHare avatar
флаг ni
Итак, похоже, что служба rc.local не включена в Ubuntu. Его нужно включить с помощью systemd.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.