콘텐츠로 이동

백그라운드 서비스로 실행

launchd, systemd, OpenRC, Windows에서 Revka를 OS 서비스로 설치하고 관리합니다.

revka servicerevka daemon을 OS가 관리하는 지속적인 백그라운드 서비스로 실행합니다. 이를 통해 로그인 또는 부팅 시 자동으로 시작되고 장애 발생 시 재시작됩니다. install, start, stop, restart, status, logs, uninstall이라는 단일 명령 세트가 각 플랫폼에 맞는 네이티브 메커니즘을 구동합니다. macOS에서는 launchd 에이전트, Linux에서는 systemd 사용자 유닛 또는 OpenRC init 스크립트, Windows에서는 Windows 작업 스케줄러 작업이 사용됩니다.

Revka가 재부팅이나 크래시 후에도 터미널 없이 동작하기를 원한다면 이 페이지를 참조하세요. 명령어 수준의 레퍼런스(플래그, 서브커맨드, 페어링)는 revka gateway, daemon & service를 참고하고, 데몬 자체와 컴포넌트 수퍼바이저에 대해서도 같은 페이지를 확인하세요.

revka service는 플랫폼과 Linux의 경우 init 시스템을 자동으로 감지합니다.

플랫폼메커니즘아티팩트
macOSlaunchd 에이전트~/Library/LaunchAgents/com.revka.daemon.plist
Linux (systemd)systemd 사용자 유닛~/.config/systemd/user/revka.service
Linux (OpenRC / Alpine)OpenRC init 스크립트/etc/init.d/revka
Windows예약된 작업Revka Daemon이라는 이름의 작업

Linux 감지는 기본적으로 거부 방식으로 동작합니다. /run/systemd/system이 존재하면 systemd를 선택하고, 그렇지 않으면 /run/openrc가 존재하고 OpenRC 바이너리(/sbin/openrc-run 또는 rc-service)가 있을 경우 OpenRC를 선택합니다. 둘 다 찾지 못하면 오류를 반환합니다. --service-init으로 강제 지정할 수 있습니다.

Terminal window
revka service --service-init systemd install
revka service --service-init openrc install
플래그기본값설명
--service-initauto, systemd, openrcauto특정 Linux init 시스템을 강제 지정합니다. 서브커맨드 앞에 전달해야 합니다.

동일한 서브커맨드가 모든 OS에서 동작합니다.

Terminal window
revka service install # generate and register the unit / plist / task
revka service start # start the service (rotates logs first)
revka service stop # stop the running service
revka service restart # stop then start
revka service status # report whether the daemon is running
revka service logs # tail the daemon logs (default: last 50 lines)
revka service logs -n 100 --follow
revka service uninstall # remove the unit / plist / task
서브커맨드목적
install플랫폼 아티팩트를 생성하고 등록하며, systemd의 경우 로그인 시 시작되도록 활성화합니다.
start서비스를 시작합니다. 시작 전에 데몬 로그를 교체합니다(20 MB 초과 시).
stop실행 중인 서비스를 중지합니다.
restart중지 후 재시작합니다.
status서비스 상태를 보고합니다. 폴백으로 45초 이내의 데몬 상태 파일도 확인합니다.
logs데몬 로그를 tail합니다. -n / --lines <N>으로 줄 수를 설정하고(기본값 50), -f / --followtail -f처럼 새 출력을 스트리밍합니다.
uninstall플랫폼 아티팩트를 제거합니다.
  1. 서비스를 설치합니다. 플랫폼과 init 시스템은 자동으로 감지됩니다.

    Terminal window
    revka service install
  2. 서비스를 시작합니다.

    Terminal window
    revka service start
  3. 정상 동작을 확인합니다. 서비스 상태와 공개 헬스 엔드포인트를 확인합니다.

    Terminal window
    revka service status
    curl http://127.0.0.1:42617/health

revka service install은 launchd 에이전트 plist를 ~/Library/LaunchAgents/com.revka.daemon.plist에 작성하고, launchctl load -wlaunchctl start com.revka.daemon으로 로드합니다. 에이전트는 RunAtLoadKeepAlive 모두 true로 설정하여 revka daemon을 실행하므로 로그인 시 시작되고 종료 시 재시작됩니다.

생성되는 plist는 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.revka.daemon</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/revka</string>
<string>daemon</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>SoftResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>4096</integer>
</dict>
<key>HardResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>8192</integer>
</dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:...</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/you/.revka/logs/daemon.stdout.log</string>
<key>StandardErrorPath</key>
<string>/Users/you/.revka/logs/daemon.stderr.log</string>
</dict>
</plist>
이유
RunAtLoad / KeepAlivetrue로그인 시 시작하고 종료 시 재시작합니다.
SoftResourceLimitsNumberOfFiles4096파일 디스크립터 소프트 한도입니다. launchd 기본값은 256으로, MCP 사이드카를 생성하는 에이전트는 이를 쉽게 소진합니다.
HardResourceLimitsNumberOfFiles8192하드 상한선입니다. 운영자는 재설치 없이 런타임에 ulimit -n으로 이 값까지 높일 수 있습니다.
EnvironmentVariablesPATH직접 지정데몬이 하위 프로세스 도구를 실행할 수 있도록 명시적인 PATH를 설정합니다.
Terminal window
revka service install
revka service start
revka service logs --follow

Revka가 Homebrew로 설치된 경우, revka service install이 이를 자동으로 감지하고 plist를 조정합니다.

  • 로그는 ~/.revka/logs/ 대신 <brew_prefix>/var/revka/logs/에 저장됩니다.
  • plist에 REVKA_CONFIG_DIR 환경 키와 Homebrew var/revka 디렉터리를 가리키는 WorkingDirectory가 추가되므로, brew upgrade 후에도 설정과 워크스페이스가 유지됩니다.

brew services start revka도 동일한 plist를 사용합니다.

Terminal window
brew services start revka

전체 Homebrew 라이프사이클은 macOS 업데이트 & 제거를 참조하세요.

데몬 로그(daemon.stdout.logdaemon.stderr.log)는 각 revka service start 전에 교체됩니다.

  • 로그 파일이 20 MB를 초과할 때만 교체가 실행됩니다.
  • 교체된 복사본은 최대 5개까지 유지되며, daemon.stdout.log.1부터 daemon.stdout.log.5까지 이름이 지정됩니다(stderr도 동일).
  • 가장 오래된 복사본은 삭제되고, 나머지는 번호가 하나씩 올라가며, 현재 파일은 .1이 됩니다.

Revka가 Homebrew로 설치된 경우 로그는 Homebrew var/revka/logs/ 디렉터리에, 그렇지 않으면 <config_dir>/logs/에 저장됩니다.

상수의미
교체 임계값20 MB이보다 작은 로그 파일은 그대로 유지됩니다.
보관 파일 수5스트림당 유지되는 교체된 복사본의 최대 개수입니다.
  • 생존 여부 확인. GET http://127.0.0.1:42617/health는 페어링 상태와 컴포넌트 스냅샷을 포함하여 200을 반환하며 인증이 필요하지 않습니다. revka status --format exit-code는 정상이면 0, 아니면 1을 종료 코드로 반환합니다. 구조화된 진단을 위해 revka doctor를 실행하세요.
  • 서비스가 시작되지 않음 (Windows). revka service status는 45초 이내의 데몬 상태 파일을 참조합니다. 예약된 작업을 사용할 수 없는 경우 Revka는 직접 실행 방식으로 폴백하므로, 로그온 자동 시작을 복원하려면 나중에 revka service install을 다시 실행하세요.
  • 로그아웃 후 systemd 서비스가 중지됨. 사용자 유닛은 로그아웃 후에도 실행을 유지하려면 lingering이 필요합니다: loginctl enable-linger $USER.
  • OpenRC 설치 중 사용자 확인 실패. UID ≥ 1000이거나 nologin이 아닌 셸을 가진 기존 revka 사용자는 거부됩니다. 오류 메시지에 출력된 명령으로 재생성하세요.
  • 데몬이 하위 프로세스 도구를 찾지 못함. launchd plist, systemd 유닛, OpenRC 스크립트 모두 이 문제를 해결하기 위해 직접 지정된 PATH를 주입합니다. Revka 또는 해당 도구를 비표준 위치에 설치한 경우, 도구가 PATH에 포함된 후 서비스를 재설치하세요.
  • 로그에서 재시작 루프 발생. 컴포넌트가 계속 실패하고 데몬 수퍼바이저가 점점 증가하는 백오프로 재시작을 반복합니다. 컴포넌트 수퍼바이저 레퍼런스를 확인하세요.