launchd로 돌린 자동 게시가 이미지 0장만 올린 이유
launchd 작업은 작업 디렉터리가 /에서 시작해요. 그래서 wrangler가 설정을 못 찾고 이미지 업로드가 조용히 비었던 과정과 고친 방법을 정리했어요.
라이프케어로그 블로그 글은 밤에 자동으로 티스토리에 올라가요. 본문을 만들고, 도표와 커버 이미지를 R2에 올린 뒤, 그 주소를 본문에 끼워 넣는 흐름이에요. 터미널에서 손으로 돌릴 땐 멀쩡했는데, launchd에 맡기고 나서 올라간 글을 열어 보니 이미지가 0장이었어요. 본문은 그대로 나갔고 그림 자리만 비어 있었죠.
터미널에서는 되고 launchd에서는 안 되는 이유
로그를 열어 보니 업로드 스크립트가 부르는 wrangler가 설정 파일을 못 찾고 있었어요. wrangler는 현재 작업 디렉터리를 기준으로 설정 파일을 찾는데, launchd로 띄운 작업은 작업 디렉터리를 따로 정해 주지 않으면 루트(/)에서 시작해요. 제가 터미널에서 돌릴 때는 늘 레포 안에 서 있었으니 될 수밖에 없었고, launchd는 / 에서 같은 명령을 친 셈이라 설정이 없는 게 당연했어요.
더 곤란했던 건 실패가 조용했다는 점이에요. 업로드가 빈손으로 끝나도 게시 단계는 그대로 진행돼서, 상태값만 보면 성공이었어요. 이미지 0장은 올라간 글을 직접 열어 봐야 보이는 종류의 실패였어요.
고친 방법
해결 자체는 단순했어요. 업로드 스크립트가 어디서 불리든 먼저 레포 루트로 이동한 다음 wrangler를 실행하게 바꿨어요. 2026-10-11 커밋에서 바뀐 파일은 3개예요. 업로드 셸 스크립트, 그걸 부르는 준비 스크립트, 그리고 이 동작을 고정하는 테스트 파일이에요.
launchd plist에 WorkingDirectory 키를 넣는 방법도 있어서 둘 중 하나를 골라야 했어요. 저는 스크립트 쪽에 두는 걸 택했어요. plist에만 넣으면 launchd로 부를 때만 맞고, 같은 스크립트를 다른 경로에서 부르면 또 어긋날 수 있어서요. 스크립트가 스스로 자리를 잡으면 누가 어디서 불러도 조건이 같아져요.
직접 재현해 보면 감이 빨리 와요. cd / 한 뒤 스크립트를 부르면 launchd와 똑같은 조건이 돼요. 고친 뒤에는 이 상태에서 돌려도 레포 루트로 들어가서 설정을 찾아요.
이미 나간 글은 어떻게 하나
고치고 끝이 아니었어요. 이미지 없이 나간 글이 이미 있었으니까요. 같은 날 조금 뒤 커밋에서 게시된 글을 수정하는 경로를 따로 만들었어요. 새 글을 다시 올리는 대신 이미 올라간 글에 도표와 모션, 커버를 같은 글로 반영하는 방식이에요. 같은 글이 두 번 올라가면 독자에겐 중복이고 검색에도 좋을 게 없어서요. 그날 이 레포에 올린 커밋은 3건인데, 그중 2건이 이 문제 하나에서 나왔어요.
- launchd 기본 작업 디렉터리는 /
- 설정을 cwd에서 찾는 도구는 실행 위치 고정
- 성공 상태 말고 실제 결과물 확인
정리
자동화를 터미널에서 데몬으로 옮길 때 먼저 의심할 건 환경 변수와 작업 디렉터리예요. 터미널은 그 둘을 공짜로 들고 있고, 데몬은 둘 다 비어 있어요. 그리고 "성공"이라고 찍힌 상태값보다 실제로 올라간 글을 열어 보는 확인이 하나는 있어야 해요. 플랜비에 회비 미납 알림을 만들 때도 기준을 "알림이 정말 도착했는가"로 잡았는데, 자동 게시도 결국 같은 얘기였어요.
관련 글
댓글
아직 댓글이 없어요. 첫 댓글을 남겨주세요.