Puncte:0

În timp ce scriptul adevărat nu rulează la pornire

drapel ni

Am un script care este menit să funcționeze cu un UPS Hat pentru un Raspberry Pi 4b. Rulez un server Ubuntu 21.04 pe 64 de biți. Când rulez manual scriptul de pe /home/user/ups.sh, funcționează grozav. Cu toate acestea, după ce am urmat instrucțiunile și am creat un fișier rc.local, nu pot face ca scriptul să pornească automat la pornire. Am plasat scriptul în directorul /user/bin/ și am făcut un chmod +x pe el.

#!/bin/bash

#GPIO17 (intrare) folosit pentru a citi starea curentă a puterii. 
#0 - normal (sau alimentarea bateriei este pornită manual). 
#1 - defecțiune de alimentare, mutat la baterie. 
echo 17 > /sys/class/gpio/export;
ecou în > /sys/class/gpio/gpio17/direcție;

#GPIO27 (intrare) folosit pentru a indica faptul că UPS-ul este online
echo 27 > /sys/class/gpio/export;
ecou în > /sys/class/gpio/gpio27/direcție;

#GPIO18 obișnuia să informeze UPS că Pi încă funcționează. După oprire, acest pin revine la starea Hi-Z. 
echo 18 > /sys/class/gpio/export;
echo out > /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";

în timp ce adevărat
do
    #citește valoarea pinului GPIO27
    #normal, UPS comută acest pin la fiecare 0,5 secunde
    ups_online1=$(cat /sys/class/gpio/gpio27/value);
    
    somn 0,1;
    
    ups_online2=$(cat /sys/class/gpio/gpio27/value);
    
    ups_online_timer=$((ups_online_timer+1));
    
    #toggled?
    if (( "$ups_online1" != "$ups_online2" )); atunci
        ups_online_timer=0;
    fi
    
    #resetați toate temporizatoarele dacă ups-ul este offline mai mult de 3 secunde (nu a fost detectată nicio comutare)
    if ("$ups_online_timer" > 30)); 
    atunci
        echo „$ups_online_timer”;
        
        ups_online_timer=30;
        power_timer=0;
        inval_power=0;
        #echo „UPS offline. Ieșire”;
        #Ieșire;
    fi      

    #citește valoarea pinului GPIO17
    inval_power=$(cat /sys/class/gpio/gpio17/value);
    
# echo $inval_power;
    
    if (( "$inval_power" == 1 )); atunci
        power_timer=$((power_timer+1));
    altfel 
        power_timer=0;
    fi
    
    #Dacă alimentarea nu a fost restabilită în 60 de secunde
    if (( "$power_timer" == 600 )); atunci 
        #echo $power_timer;
        echo „Oprire...”
        somn 2;
        poweroff systemctl; #opriți
        Ieșire;
    fi  
Terminat

asta am în fișierul rc.local

#!/bin/sh -e
#
# rc.local
#

bash /usr/bin/ups.sh &

iesirea 0

Caut pe google de zile întregi și am încercat fișierele cron și systemd și nimic nu pare să funcționeze. Să sperăm că există un suflet bun care are un răspuns. Mulțumesc.

CyberHare avatar
drapel ni
Deci se pare că serviciul rc.local nu este activat în ubuntu. Trebuie să fie pornit cu systemd.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.