lifecarelog
개발일지

launchd로 돌린 자동 게시가 이미지 0장만 올린 이유

launchd 작업은 작업 디렉터리가 /에서 시작해요. 그래서 wrangler가 설정을 못 찾고 이미지 업로드가 조용히 비었던 과정과 고친 방법을 정리했어요.

6분 읽기

라이프케어로그 블로그 글은 밤에 자동으로 티스토리에 올라가요. 본문을 만들고, 도표와 커버 이미지를 R2에 올린 뒤, 그 주소를 본문에 끼워 넣는 흐름이에요. 터미널에서 손으로 돌릴 땐 멀쩡했는데, launchd에 맡기고 나서 올라간 글을 열어 보니 이미지가 0장이었어요. 본문은 그대로 나갔고 그림 자리만 비어 있었죠.

터미널에서는 되고 launchd에서는 안 되는 이유

로그를 열어 보니 업로드 스크립트가 부르는 wrangler가 설정 파일을 못 찾고 있었어요. wrangler는 현재 작업 디렉터리를 기준으로 설정 파일을 찾는데, launchd로 띄운 작업은 작업 디렉터리를 따로 정해 주지 않으면 루트(/)에서 시작해요. 제가 터미널에서 돌릴 때는 늘 레포 안에 서 있었으니 될 수밖에 없었고, launchd는 / 에서 같은 명령을 친 셈이라 설정이 없는 게 당연했어요.

더 곤란했던 건 실패가 조용했다는 점이에요. 업로드가 빈손으로 끝나도 게시 단계는 그대로 진행돼서, 상태값만 보면 성공이었어요. 이미지 0장은 올라간 글을 직접 열어 봐야 보이는 종류의 실패였어요.

launchd가 / 에서 시작wrangler가 설정 파일 못 찾음업로드 0장게시는 그대로 진행

고친 방법

해결 자체는 단순했어요. 업로드 스크립트가 어디서 불리든 먼저 레포 루트로 이동한 다음 wrangler를 실행하게 바꿨어요. 2026-10-11 커밋에서 바뀐 파일은 3개예요. 업로드 셸 스크립트, 그걸 부르는 준비 스크립트, 그리고 이 동작을 고정하는 테스트 파일이에요.

launchd plist에 WorkingDirectory 키를 넣는 방법도 있어서 둘 중 하나를 골라야 했어요. 저는 스크립트 쪽에 두는 걸 택했어요. plist에만 넣으면 launchd로 부를 때만 맞고, 같은 스크립트를 다른 경로에서 부르면 또 어긋날 수 있어서요. 스크립트가 스스로 자리를 잡으면 누가 어디서 불러도 조건이 같아져요.

직접 재현해 보면 감이 빨리 와요. cd / 한 뒤 스크립트를 부르면 launchd와 똑같은 조건이 돼요. 고친 뒤에는 이 상태에서 돌려도 레포 루트로 들어가서 설정을 찾아요.

이미 나간 글은 어떻게 하나

고치고 끝이 아니었어요. 이미지 없이 나간 글이 이미 있었으니까요. 같은 날 조금 뒤 커밋에서 게시된 글을 수정하는 경로를 따로 만들었어요. 새 글을 다시 올리는 대신 이미 올라간 글에 도표와 모션, 커버를 같은 글로 반영하는 방식이에요. 같은 글이 두 번 올라가면 독자에겐 중복이고 검색에도 좋을 게 없어서요. 그날 이 레포에 올린 커밋은 3건인데, 그중 2건이 이 문제 하나에서 나왔어요.

  • launchd 기본 작업 디렉터리는 /
  • 설정을 cwd에서 찾는 도구는 실행 위치 고정
  • 성공 상태 말고 실제 결과물 확인

정리

자동화를 터미널에서 데몬으로 옮길 때 먼저 의심할 건 환경 변수와 작업 디렉터리예요. 터미널은 그 둘을 공짜로 들고 있고, 데몬은 둘 다 비어 있어요. 그리고 "성공"이라고 찍힌 상태값보다 실제로 올라간 글을 열어 보는 확인이 하나는 있어야 해요. 플랜비에 회비 미납 알림을 만들 때도 기준을 "알림이 정말 도착했는가"로 잡았는데, 자동 게시도 결국 같은 얘기였어요.

#launchd#wrangler#자동화 디버깅

라이프케어로그 서비스가 궁금하신가요?

AI 기반 건강·일정·재활 관리 앱을 직접 써보세요.

서비스 살펴보기

관련 글

댓글

아직 댓글이 없어요. 첫 댓글을 남겨주세요.