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.