현재: 예약이 DB에 저장되는데, 실행은 에이전트가 polling해서 직접 실행 하는 방식(pull 방식)으로 설계돼 있습니다. 즉 mihosocket/relay를 전혀 안 씁니다. 바꿀 것: 예약 시각이 되면 서버(Next.js)가 mihosocket prepare→execute API를 호출 해서 relay를 통해 에이전트에 명령을 내리는 push 방식 으로 전환합니다. 에이전트가 polling할 필요 없이, 기존에 만들어둔 명령 채널을 완전히 활용합니다. 이제 수정합니다. Ran 2 commands Ran 2 commands Check file sizes before modification Copy to modification directory Done 핵심 수정 파일 3개를 만듭니다. ① mihosocket 명령 실행 lib (prepare→execute 공통 함수) New mihosocket command execution helper New mihosocket command execution helper New mihosocket command execution helper Done ② pending route — relay로 즉시 실행하는 서버사이드 dispatcher Write new pending route with relay dispatch Write new pending route with relay dispatch ③ 내부 dispatcher API — cron 또는 직접 호출용 Write dispatch API route Write dispatch API route 이제 수정된 파일들을 검증하고 패키징합니다. Ran 2 commands, edited a file Ran 2 commands, edited a file TypeScript 에러 0개. 패키징합니다. Ran a command, read a file Ran a command, read a file TypeScript 에러 0개. schedule_relay_patch.tgz 입니다. 무엇이 바뀌었나 신규 파일 3개 를 web 소스 트리에 넣으면 됩니다: 파일 역할 src/lib/miho-command.ts mihosocket prepare→execute 공통 헬퍼 src/app/api/schedule/pending/route.ts 기존 파일 교체 — relay dispatch 추가 src/app/api/schedule/dispatch/route.ts 신규 — cron/직접 호출용 dispatcher 동작 방식 변경: 기존(pull): 에이전트가 1분마다 polling → 직접 reboot/exec 실행 변경(push): 서버가 예약 시각에 mihosocket prepare→execute 호출 → relay WSS → 에이전트가 명령 수신·실행 적용 절차 (서버) sh cd ~/work/web tar xzf schedule_relay_patch.tgz # .env 에 추가 (없으면) echo 'MIHOSOCKET_URL=http://10.8.0.105:8080' >> .env.local echo 'MIHOSOCKET_ADMIN_KEY=<MS_ADMIN_API_KEY 값>' >> .env.local echo 'SCHEDULE_DISPATCHER_KEY=<랜덤 키>' >> .env.local npm run build pm2 restart <앱이름> 실행 트리거 — 1분마다 자동 dispatch (서버에서 crontab) sh # 서버(7490fb)에서 — pm2 앱이 127.0.0.1:3000 이면 DKEY="<SCHEDULE_DISPATCHER_KEY>" * * * * * curl -s -X POST http://127.0.0.1:3000/api/schedule/dispatch \ -H "x-dispatcher-key: $DKEY" >> /var/log/schedule_dispatch.log 2>&1 또는 대시보드 내부에서 setInterval 로 직접 호출해도 됩니다. 에이전트 policy.json 필수 추가 명령이 실제로 실행되려면 x1a/x280a 의 policy.json에 허용 액션이 있어야 합니다: sh # x1a, x280a 에서 sudo tee /usr/local/etc/miho/policy.json >/dev/null <<'EOF' { "allowed_actions": [ "system.reboot", "system.shutdown", "exec.command", "service.restart", "service.start" ] } EOF sudo systemctl restart mihosrcd grep -a "policy loaded" /var/log/mihosrcd.log | tail -1 동작 확인 달력에서 x1a에 재부팅 예약(1~2분 후) → cron이 뜨면 → 에이전트 로그 확인: sh grep -aE "\[cmd\] executing|system.reboot" /var/log/mihosrcd.log | tail -5 Schedule relay patch TGZ