본문 바로가기

EP 빌드로그

EP.39 맥 자동 예약작업이 3주간 안 돌았던 이유: 파일은 있는데 서비스가 멈춰 있었다

들어가며 · 조용히 멈춰 있던 자동 작업

맥에는 정해진 시간마다 프로그램을 자동으로 실행해 주는 기능이 있습니다. 저는 이걸로 블로그 로그인 상태를 계속 살아 있게 유지하는 작업을 걸어 뒀는데, 어느 날 확인해 보니 3주 가까이 단 한 번도 실행되지 않고 있었습니다.
더 무서운 건 겉으로는 아무 문제가 없어 보였다는 점입니다. 등록해 둔 설정 파일은 제자리에 멀쩡히 있었고, 파일만 열어 보면 정상이었습니다. 이 글은 '파일은 있는데 왜 안 돌았는지'를 찾아내고, 재부팅 후에도 다시 멈추지 않도록 고친 과정을 그대로 적은 기록입니다.
결론부터 말하면 원인은 두 가지였습니다. 첫째, 이 작업이 내부적으로 '실행 금지' 상태로 잠겨 있었습니다. 둘째, 작업이 필요로 하는 설정값 하나가 재부팅하면 사라지는 방식으로만 걸려 있었습니다.


무엇을 확인했나 · 마지막 실행이 7월 17일

작업 이름은 com.aiblog.keepalive였습니다. 확인해 보니 마지막으로 실행된 기록이 7월 17일이었고, 그 뒤로는 예약 시간이 와도 아무 일도 일어나지 않았습니다.

문제는 이 상태를 알아채기 어려웠다는 것입니다. 설정 파일은 맥이 예약 작업 정보를 보관하는 폴더(~/Library/LaunchAgents)에 그대로 있었습니다. 그래서 '파일이 있으니 잘 돌고 있겠지'라고 넘어가기 딱 좋았습니다.

하지만 launchctl list 출력에서는 이 작업이 보이지 않았습니다. 즉 파일은 존재하지만 서비스로는 등록되어 있지 않은 상태였던 것입니다.


원인 · '파일이 있다'와 '서비스가 돈다'는 다른 상태

맥의 예약 작업 시스템에는 각 작업을 강제로 켜고 끌 수 있는 별도의 내부 기록(override)이 있습니다. 이 작업은 그 내부 기록에 '실행 금지(disabled)'로 잠겨 있었습니다. 참고로 작업을 내릴 때 쓰는 bootout 명령은 작업을 멈추는 데서 끝나지 않고 이 내부 기록에 '실행 금지' 표시를 남기는 특성이 있습니다.

이렇게 잠겨 있으면 파일을 다시 넣어도, 잠금이 풀리지 않는 한 예약 시간이 와도 실행되지 않습니다. 저는 이 잠금 상태를 launchctl print-disabled까지 확인해서야 알 수 있었습니다.

두 번째 원인은 환경변수였습니다. 이 작업은 TISTORY_CDP_URL이라는 설정값에 의존하는데, 이 값을 launchctl setenv로만 넣어 둔 상태였습니다. 이 방식으로 넣은 값은 재부팅하면 사라집니다. 값이 사라지면 항상 켜져 있어야 할 브라우저가 아니라 옛날 프로필로 연결되어, 로그인 세션이 만료되는 경로가 되살아납니다.

겉보기실제 상태
설정 파일이 폴더에 있음서비스로 등록되어 있지 않음
파일 내용은 정상내부 기록에 '실행 금지'로 잠김
환경변수가 잡혀 있음재부팅하면 사라지는 임시 설정

어떻게 고쳤나 · 잠금 해제 + 설정 영구화

고친 순서는 다음과 같습니다.

  1. 실행 금지 잠금부터 해제launchctl enablecom.aiblog.keepalive의 '실행 금지' 표시를 풀었습니다.
  2. 서비스로 다시 등록(bootstrap) — 잠금을 푼 뒤 작업을 시스템에 다시 올렸습니다.
  3. 환경변수를 파일에 직접 박기 — 임시로만 잡혀 있던 TISTORY_CDP_URL을 두 작업의 설정 파일 안 EnvironmentVariables 항목에 직접 적었습니다. 이렇게 하면 재부팅해도 값이 남습니다.
  4. 바로 한 번 실행해 확인(kickstart) — 예약 시간을 기다리지 않고 예약 시스템을 통해 1회 실행시켜, 종료 코드 0(정상 종료)과 세션 유효 메시지를 눈으로 확인했습니다.

이번 사례에서는 4번까지 갔을 때 예약 경로를 통해서 실행 결과를 확인한 것이 유효했습니다. 손으로 직접 실행하면 잘 되는데 예약으로는 안 되는 경우가 있어, 예약 시스템을 거쳐 확인하니 실제로 고쳐졌는지 확신할 수 있었습니다.


전후 비교

항목고치기 전고친 후
작업 실행7/17 이후 한 번도 안 돎예약 경로로 정상 실행 확인
내부 잠금'실행 금지'로 잠김잠금 해제 후 재등록
환경변수재부팅하면 사라짐설정 파일에 박아 재부팅에도 유지
확인 방법파일 존재만 봄실행 목록·잠금 상태·실행 결과까지 확인

남은 과제 · 다음에 또 조용히 멈추지 않으려면

이번 일에서 얻은 가장 큰 교훈은 맥의 예약 작업은 '파일이 있다'와 '서비스가 돈다'가 완전히 다른 상태라는 것입니다. 파일 존재만으로는 정상 여부를 절대 알 수 없습니다.
점검할 때는 최소한 이 세 가지를 함께 봐야 합니다.

  • 실행 중 목록에 실제로 잡혀 있는가
  • 내부 기록에 '실행 금지'로 잠겨 있지는 않은가(print-disabled)
  • 마지막 실행 시각이 예상 주기 안에 있는가

또 자동화가 의존하는 설정값은 임시 명령이 아니라 설정 파일에 직접 박아 재부팅에도 살아남게 해야 합니다. 이번처럼 3주를 모르고 지나가지 않으려면, 파일 존재만 확인하는 습관을 버리고 위 세 가지를 함께 보는 점검 방식으로 바꾸는 것이 우선입니다.

반응형