|
|
楼主 |
发表于 2025-10-19 16:42
|
显示全部楼层
这个是原作者的代码,一点未改
OES Plus 我自己写个硬盘指示灯脚本
创建脚本 /usr/local/bin/sata-led-daemon.sh
sudo nano /usr/local/bin/sata-led-daemon.sh
复制下面脚本内容:
#!/usr/bin/env bash
# sata-led-daemon.sh
# 控制逻辑:
# - 无盘:保持设备树默认 ataX(LED不亮)
# - 有盘空闲:切换 default-on (长亮)
# - 有盘读写:切回 ataX (闪烁)
# log信息,如需打开请取消下面3个注释!
#LOG=/var/log/sata-led-daemon.log
#exec >>"$LOG" 2>&1
#echo "=== $(date) sata-led-daemon starting ==="
LEDS=( "green:disk" "green:disk_1" "green:disk_2" )
ATAS=( "ata1" "ata2" "ata3" )
declare -A last_count
declare -A state
set_trigger() {
local led="$1"
local trig="$2"
local p="/sys/class/leds/$led"
[ -d "$p" ] || return
echo "$trig" > "$p/trigger" 2>/dev/null || true
}
while true; do
for i in "${!ATAS[@]}"; do
ata="${ATAS[$i]}"
led="${LEDS[$i]}"
# 找出对应的设备
dev=$(for bd in /sys/block/*; do
[ -e "$bd/device" ] || continue
path=$(readlink -f "$bd/device" 2>/dev/null) || continue
if echo "$path" | grep -q "$ata"; then
basename "$bd"
break
fi
done)
if [ -z "$dev" ]; then
# 无盘 → 保持默认 ataX
if [ "${state[$i]}" != "absent" ]; then
echo "$(date) ata=$ata -> no dev, keep $ata for $led"
set_trigger "$led" "$ata"
state[$i]="absent"
fi
continue
fi
statfile="/sys/block/$dev/stat"
cur=$(awk '{print $1+$5}' "$statfile" 2>/dev/null)
[ -z "$cur" ] && cur=0
last=${last_count[$i]:-0}
if [ "$cur" -gt "$last" ]; then
# 活动 → 切回 ataX
if [ "${state[$i]}" != "active" ]; then
echo "$(date) ata=$ata dev=$dev activity ($last -> $cur) -> set $ata for $led"
set_trigger "$led" "$ata"
state[$i]="active"
fi
else
# 空闲 → default-on
if [ "${state[$i]}" != "idle" ]; then
echo "$(date) ata=$ata dev=$dev idle ($last -> $cur) -> DEFAULT-ON for $led"
set_trigger "$led" "default-on"
state[$i]="idle"
fi
fi
last_count[$i]="$cur"
done
sleep 1
done
赋予脚本可执行权限
sudo chmod +x /usr/local/bin/sata-led-daemon.sh
创建systemd 单元(守护进程) /etc/systemd/system/sata-led-daemon.service
sudo nano /etc/systemd/system/sata-led-daemon.service
复制下面的脚本
[Unit]
Description=SATA LED Auto Control Daemon
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/local/bin/sata-led-daemon.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
加载 systemd,启用并启动 daemon
sudo systemctl daemon-reload
sudo systemctl enable --now sata-led-daemon.service
查看进程状态
# 实时日志(脚本也写入 /var/log/sata-led-daemon.log)
sudo journalctl -u sata-led-daemon.service -f
tail -n 200 /var/log/sata-led-daemon.log
#如果日志记录功能关闭请用如下命令查看
journalctl -u sata-led-daemon.service -f |
|