diff --git a/firmware/update_fw.sh b/firmware/update_fw.sh index b8177ab..29199ff 100755 --- a/firmware/update_fw.sh +++ b/firmware/update_fw.sh @@ -207,8 +207,18 @@ if want host; then HOST_PID_OLD=$(systemctl show -p ExecMainPID --value klipper-mcu) make -C "$KLIPPER" flash KCONFIG_CONFIG="$BUILD_TMP/$HOST_CFG" [ "$(stat -c %Y "$HOST_BIN")" -ge "$START_TS" ] || die "$HOST_BIN не обновился" - host_restarted() { [ "$(systemctl show -p ExecMainPID --value klipper-mcu)" != "$HOST_PID_OLD" ] && [ -e /tmp/klipper_host_mcu ]; } - wait_for 10 "klipper-mcu не перезапустился (PID $HOST_PID_OLD)" host_restarted + host_restarted() { + [ "$(systemctl show -p ExecMainPID --value klipper-mcu)" != "$HOST_PID_OLD" ] \ + && [ "$(systemctl show -p SubState --value klipper-mcu)" = "running" ] && [ -e /tmp/klipper_host_mcu ] + } + if ! wait_for 10 "klipper-mcu не перезапустился (PID $HOST_PID_OLD)" host_restarted; then + journalctl -u klipper-mcu -n 8 --no-pager -o cat || true + die "klipper-mcu не работает после прошивки (см. journalctl -u klipper-mcu)" + fi + # Убедиться, что процесс не падает в цикле перезапуска (Restart=always) + sleep 3 + [ "$(systemctl show -p SubState --value klipper-mcu)" = "running" ] \ + || { journalctl -u klipper-mcu -n 8 --no-pager -o cat || true; die "klipper-mcu перезапускается в цикле"; } echo "klipper-mcu перезапущен (PID $HOST_PID_OLD -> $(systemctl show -p ExecMainPID --value klipper-mcu)), $HOST_BIN обновлён" fi