Điểm:0

Trong khi tập lệnh thực sự không chạy khi khởi động

lá cờ ni

Tôi có một tập lệnh dùng để hoạt động với Mũ UPS cho Raspberry Pi 4b. Tôi đang chạy máy chủ Ubuntu 21.04 64 bit. Khi tôi chạy tập lệnh theo cách thủ công từ /home/user/ups.sh, nó hoạt động rất tốt. Tuy nhiên, sau khi làm theo hướng dẫn và tạo tệp rc.local, tôi không thể tự khởi động tập lệnh khi khởi động. Tôi đã đặt tập lệnh vào thư mục/user/bin/ và thực hiện chmod +x trên đó.

#!/bin/bash

#GPIO17 (đầu vào) được sử dụng để đọc trạng thái nguồn hiện tại. 
#0 - bình thường (hoặc bật nguồn pin theo cách thủ công). 
#1 - lỗi nguồn, chuyển sang pin. 
tiếng vang 17 > /sys/class/gpio/export;
tiếng vang trong > /sys/class/gpio/gpio17/direction;

#GPIO27 (đầu vào) được sử dụng để chỉ ra rằng UPS đang trực tuyến
tiếng vang 27 > /sys/class/gpio/export;
tiếng vang trong > /sys/class/gpio/gpio27/direction;

#GPIO18 được sử dụng để thông báo cho UPS rằng Pi vẫn đang hoạt động. Sau khi tắt nguồn, chân này trở về trạng thái Hi-Z. 
tiếng vang 18 > /sys/class/gpio/export;
echo out > /sys/class/gpio/gpio18/direction;
tiếng vang 0 > /sys/class/gpio/gpio18/value;

power_timer=0;
inval_power="0";

ups_online1="0";
ups_online2="0";
ups_online_timer="0";

trong khi đúng
làm
    #đọc giá trị chân GPIO27
    #thông thường, cứ sau 0,5 giây, UPS lại bật/tắt chốt này
    ups_online1=$(cat /sys/class/gpio/gpio27/value);
    
    ngủ 0,1;
    
    ups_online2=$(cat /sys/class/gpio/gpio27/value);
    
    ups_online_timer=$((ups_online_timer+1));
    
    # bật tắt?
    if (( "$ups_online1" != "$ups_online2" )); sau đó
        up_online_timer=0;
    fi
    
    #đặt lại tất cả bộ hẹn giờ nếu up ngoại tuyến lâu hơn 3 giây (không phát hiện chuyển đổi)
    if (("$ups_online_timer" > 30)); 
    sau đó
        tiếng vang "$ups_online_timer";
        
        up_online_timer=30;
        power_timer=0;
        inval_power=0;
        #echo "UPS ngoại tuyến. Thoát";
        #lối ra;
    fi      

    #đọc giá trị chân GPIO17
    inval_power=$(cat /sys/class/gpio/gpio17/value);
    
# tiếng vang $inval_power;
    
    nếu (( "$inval_power" == 1 )); sau đó
        power_timer=$((power_timer+1));
    khác 
        power_timer=0;
    fi
    
    #Nếu nguồn điện không được phục hồi sau 60 giây
    nếu (( "$power_timer" == 600 )); sau đó 
        #echo $power_timer;
        echo "Tắt nguồn..."
        ngủ 2;
        tắt nguồn systemctl; #tắt
        lối ra;
    fi  
xong

đây là những gì tôi có trong tệp rc.local

#!/bin/sh -e
#
# rc.địa phương
#

bash /usr/bin/ups.sh &

thoát 0

Tôi đã tìm kiếm trên google trong nhiều ngày và tôi đã thử các tệp cron và systemd và dường như không có gì hoạt động. Hy vọng rằng có một linh hồn tốt bụng có một câu trả lời. Cảm ơn bạn.

CyberHare avatar
lá cờ ni
Vì vậy, có vẻ như dịch vụ rc.local không được bật trong Ubuntu. Nó cần được bật với systemd.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.