제IV부
스크립트와 일정, AI 관리자, MCP, AI 스택 — FrontierStack을 단순한 제어판에서 스스로 일하는 도구로 바꿔 주는 네 개의 장입니다.
제12장
스크립트, Cron 및 자동화
하루 종일 실행하는 명령을 저장하고, 실제 시스템 cron으로 일정을 잡고, FrontierStack을 Apple 단축어, Siri 및 Mac의 다른 기능과 연결하십시오. 클릭 한 번으로 실행하는 스크립트부터 손을 쓰지 않는 음성 명령까지 다룹니다.
유능한 서버 관리자는 몇 가지 같은 일을 반복해서 합니다. 백업을 실행하고, 캐시를 예열하고, 백엔드를 올바른 방법으로 재시작하고, 가상 호스트가 정말 생각한 대로 제공하고 있는지 확인합니다. FrontierStack에서는 이러한 작업을 각각 저장된 스크립트로 만들어 클릭 한 번으로 실행하고, — 믿을 수 있게 되면 — cron에 맡겨 무인으로 실행할 수 있습니다. 여기서 더 나아가 Apple 단축어, Siri, frontierstack:// URL 스킴, 그리고 앱이 스스로 수행하는 예약 작업까지 이어집니다.
이 장에서는 자동화의 기계적인 측면, 즉 스크립트, 일정, macOS 자동화 기능을 다룹니다. 지능적인 측면 — 이러한 스크립트를 대신 작성하고 저장하고 예약하는 AI — 은 13장에서 다룹니다. 여기에 나오는 모든 것은 AI 관리자가 자체의 감사되는 도구로 조작할 수 있으므로, 두 장은 같은 장치를 양쪽 끝에서 설명합니다.
12.1스크립트 및 Cron 패널
사이드바에서 스크립트 및 Cron을 여십시오. 저장된 스크립트 라이브러리와 스케줄러가 한곳에 모여 있습니다. 상단의 저장된 스크립트 섹션에는 보관한 모든 스크립트가 이름과 본문 첫 줄과 함께 나열됩니다. 각 스크립트에는 네 개의 버튼이 있습니다. 실행(지금 실행), 예약(아래에서 설명하는 cron에 맡기기), 편집(편집기 열기), 그리고 삭제용 휴지통 아이콘입니다. 새 스크립트를 작성하려면 스크립트 추가…를 누르십시오.
저장된 스크립트는 앱이 해석하는 조각이 아니라 디스크에 있는 실제 실행 파일 — 셸, PHP 또는 Python — 입니다. 명확한 이름과 용도를 설명하는 메모를 붙여, 6개월 뒤의 사용자(또는 라이브러리를 훑어보는 AI 관리자)가 무엇을 하는 스크립트인지 한눈에 알아보고 올바른 것을 고를 수 있도록 하십시오. 저장된 파일이 그대로 실행되므로, 직접 테스트한 것이 일정에 따라 실행되는 것과 정확히 같습니다.
각 스크립트의 대상은 기본값인 이 Mac, 로컬 Docker 컨테이너, 또는 이름으로 지정한 연결된 서버(SSH 경유)입니다. 자격 증명이 필요한 스크립트는 로컬 .env 보관함의 이름 있는 비밀 값을 환경 변수($DB_PASSWORD, "$SSH_SUDO_PASS")로 참조합니다. 앱은 실행 시점에 실제 값을 주입하며, 그 값이 클라우드 모델에 도달하는 일은 결코 없습니다(13장).
12.2cron으로 예약하기
Cron 작업 섹션은 실제 시스템 crontab을 다루는 친숙한 프런트엔드입니다 — 앱이 따로 만든 스케줄러가 아니라, Unix에서 수십 년 동안 무인 작업을 실행해 온 바로 그 cron입니다. 각 행에는 작업 이름, 일정에 대한 쉬운 설명(FrontierStack이 5개 필드 구문을 대신 풀어 줍니다), 실행하는 명령이 표시되며, 활성화/비활성화 스위치와 지금 실행, 편집, 삭제 버튼이 있습니다.
저장된 스크립트에서 예약을 누르거나, 임의의 명령에 대해 작업 추가…를 누르면 일정 작성기가 열립니다. 주기 — 매시간, 매일 특정 시각, 매주 — 를 고르면 FrontierStack이 crontab 항목을 작성하고, 나중에 이름으로 찾아 업데이트할 수 있도록 자신의 작업에 # AC: 주석을 붙입니다. AI 관리자를 통해서도 마찬가지입니다. list_cron은 작업을 읽고, schedule_cron은 작업을 생성하거나 업데이트합니다(같은 이름의 작업이 이미 있으면 그 자리에서 업데이트).
완전히 직접 제어하려면 패널 하단의 원본 crontab 편집을 펼치십시오. 텍스트 편집기에 표시되는 표준 crontab이며, FrontierStack이 관리하는 작업은 # AC: 주석으로 표시되어 어느 줄이 앱의 것인지 알 수 있습니다. 직접 편집한 다음 적용을 누르십시오.
FS_TRIGGER, FS_LOCATION, FS_DEVICE, FS_DISK…)를 환경 변수로 받습니다. cron은 시간을, 트리거는 이벤트를 담당합니다.12.3함께 제공되는 샘플 스크립트
FrontierStack에는 검증되고 실전에서 다듬어진 관리 스크립트로 이루어진 작은 읽기 전용 라이브러리가 포함되어 있습니다. 이것은 사용자의 스크립트가 아니므로 그 자리에서 편집할 수는 없지만, 어느 것이든 전체 소스를 읽고 배우고, 자신의 라이브러리에 복사해 고쳐 쓸 수 있습니다. 이 스크립트들은 Mac 웹 스택(특히 구형 macOS Server 백엔드)의 실제 특이점을 담고 있으므로, 직접 작성하기 전에 하나 읽어 두면 예상치 못한 문제를 피할 수 있습니다. AI 관리자도 list_sample_scripts와 read_sample_script로 이 스크립트를 먼저 읽으므로, AI가 만드는 스크립트도 같은 어렵게 얻은 지식을 이어받습니다.
| 스크립트 | 하는 일 |
|---|---|
apache_real_docroot | 가상 호스트가 실제로 제공하는 문서 루트를 찾아냅니다 — 설정에 적힌 것이 아니라 Apache가 실행 시점에 결정하는 것입니다. |
apache_url_matrix | 가상 호스트의 경로 목록에 대한 HTTP 상태를 실제 호스트 헤더로 테스트해 보고하므로, 어떤 URL이 정상인지 한눈에 볼 수 있습니다. |
fleet_file_diff | 파일 하나의 체크섬을 플릿 전체에서 비교해 설정 드리프트 — 어떤 기기가 나머지와 조용히 달라진 곳 — 를 찾습니다. |
macos_httpd_vhosts | macOS Server 백엔드의 가상 호스트 → 문서 루트 맵을 출력하므로, 레거시 스택이 무엇을 제공하는지 정확히 볼 수 있습니다. |
macos_web_restart | macOS Server 웹 백엔드를 올바른 방법으로 재시작합니다 — 투박한 apachectl이 아니라 올바른 순서로 실행합니다. |
node_healthcheck | 가상 호스트 하나에 대해 여러 노드에 걸친 플릿 드리프트 / 상태 확인을 수행합니다. |
php_opcache_check | CLI와 웹 SAPI 양쪽의 OPcache 상태를 보고합니다. 두 쪽은 따로 설정되므로 어긋나기 쉽습니다. |
12.4Apple 단축어, App Intents 및 Siri
FrontierStack은 네이티브 App Intents를 제공합니다 — macOS 단축어 앱, Spotlight에 나타나고, (그중 몇 가지는) 말로 할 수 있는 기본 제공 Siri 문구로도 나타나는 동작입니다. 단축키, 메뉴 막대, 폴더 동작에서 실행하는 단축어에 넣어 쓰십시오. Automator는 단축어와 AppleScript를 실행할 수 있으므로 Automator에서도 작동합니다. 제공되는 동작은 다음과 같습니다.
| 동작 | 하는 일 | 기본 제공 Siri 문구 |
|---|---|---|
| 서버 스크립트 실행 | 저장된 스크립트 하나를 이름으로 실행합니다. | — |
| 서비스 그룹 시작 / 중지 | 그룹의 모든 서비스를 한꺼번에 시작하거나 중지합니다. | “Start my servers with FrontierStack” |
| 서비스 재시작 | Apache, Nginx, MySQL 또는 PostgreSQL을 재시작합니다. | “Restart a service with FrontierStack” |
| Docker 컨테이너 재시작 | 이름을 지정한 컨테이너를 재시작합니다. | — |
| 로컬 상태 가져오기 | 로컬 상태 요약(실행 중 / 중지된 서비스)을 반환합니다. | “Check server health with FrontierStack” |
| 사이드바 프리셋 적용 | 사이드바를 저장된 프리셋으로 전환합니다. | — |
| DNS 캐시 비우기 | macOS DNS 리졸버 캐시를 비웁니다. | — |
| 알림 보내기 | 알림 채널을 통해 알림을 보냅니다. | — |
| 서버 어시스턴트에게 묻기 | 일상적인 말로 된 질문을 AI 관리자에게 보내고 답을 워크플로로 돌려줍니다. | “Ask FrontierStack…” |
카탈로그는 이보다 더 넓습니다 — 서버 상태 가져오기, 서버 목록, Docker 컨테이너 목록, 웹사이트 확인 등도 모두 단축어를 만드는 데 사용할 수 있습니다. 기본 Siri 문구가 없는 동작도 마찬가지입니다.
macOS 15 이상에서는 FrontierStack이 서버, 웹사이트, 채굴 장비, Kubernetes 클러스터, 저장된 스크립트, 사이드바 프리셋을 Spotlight 색인(App Intents IndexedEntity)에도 등록합니다. 그러면 Siri와 Apple Intelligence가 “스테이징 서버 확인해 줘”나 “야간 백업 스크립트 실행해 줘”를 올바른 항목으로 해석할 수 있고, 각 항목은 실시간 부제와 함께 Spotlight에 나타납니다. 색인되는 것은 단축어가 이미 읽을 수 있던 정보 — 이름, 호스트 이름, OS, 상태 — 뿐이며 자격 증명이나 메모는 결코 포함되지 않습니다. 앱이 잠겨 있거나 라이선스가 없는 동안에는 색인이 비워집니다.
12.5스크립트에서 앱 조작하기
App Intents는 실제 단축어 동작이므로, macOS shortcuts 명령줄 도구를 사용해 셸 단계에서 호출할 수 있습니다 — 저장된 스크립트, cron 작업, Automator의 “셸 스크립트 실행” 동작, 또는 어떤 런처에서든 유용합니다. FrontierStack 동작을 한 줄짜리 단축어로 감싼 다음 shortcuts run "My Shortcut"으로 호출하고, 스크립트가 하는 다른 작업과 연결하십시오.
이 조립은 AI 관리자가 대신 해 줄 수 있습니다. 단축어를 통해 앱을 조작하는 자동화 스크립트를 요청하면, AI 관리자는 list_app_intents를 호출해 사용 가능한 동작과 각 동작의 정확한 shortcuts run 호출 방법을 확인한 다음, save_script로 스크립트를 작성합니다(또는 schedule_cron으로 예약합니다). 힌트가 아니라 완성되어 바로 실행할 수 있는 스크립트를 받게 됩니다.
12.6예약된 앱 동작
cron 작업은 셸 명령을 실행합니다. 예약된 앱 동작은 다릅니다. 이것은 앱 자체가 일정에 따라 수행하는 작업으로, 원시 셸 명령이 아니라 앱에 저장된 자격 증명과, 사용자와 AI 관리자가 사용하는 것과 같은 감사되는 도구를 사용합니다. 앱 동작을 사용하면 정해진 시간표에 따라 연결된 서버 재부팅, 앱이 제어하는 로컬 서비스 시작, 중지 또는 재시작, DNS 비우기를 할 수 있습니다. 앱 동작은 schedule_app_action으로 관리하고 list_app_actions로 나열하며, 패널의 예약된 앱 동작 아래에 표시됩니다. 가장 자연스럽게 만드는 방법은 AI 관리자에게 — “매일 밤 3시에 web-03 재부팅해 줘” — 라고 요청하고 승인하는 것입니다.
cron과 중요한 차이가 하나 있습니다. 앱 동작은 FrontierStack이 열려 있을 때만 실행됩니다. 앱을 통해 동작을 수행하므로, 앱이 닫혀 있는 동안 예정 시각이 된 것은 따라잡지 않습니다. 반면 cron은 앱이 열려 있든 아니든 시스템 수준에서 실행됩니다. 무슨 일이 있어도 반드시 실행되어야 하는 것에는 cron을, 앱이 자체 자격 증명과 도구로 해야 하는 것에는 앱 동작을 선택하십시오.
12.7frontierstack:// URL 스킴
모든 패널, 서버, 사이트, 컨테이너, Cloudflare 영역에는 frontierstack:// 딥 링크가 있습니다. AppleScript, Automator 셸 단계, 런처, 또는 어떤 스크립트 실행기에서든 open frontierstack://pane/Security 같은 한 줄로 앱을 앞으로 가져와 해당 패널로 바로 이동할 수 있습니다. 동작을 백그라운드에서 실행하는 대신 앱을 특정 위치에 띄워 두고 싶을 때, FrontierStack을 기존 워크플로에 연결하는 가장 빠른 방법입니다. URL 스킴의 전체 참조는 18장에 있습니다.
12.8백업, 로그 및 변경 로그 자동 내보내기
일상 자동화의 마지막 요소는 FrontierStack이 생성한 파일을 일정에 따라 Mac 밖으로 내보내는 것입니다. 백업 개요의 폴더로 자동 내보내기 섹션은 생성된 파일을 원하는 폴더로 복사합니다 — 외부 보관을 위한 Dropbox 폴더, 또는 자신만의 후속 규칙을 실행하도록 Hazel이 감시하는 폴더 등입니다. 기본 제공 피드는 세 가지입니다.
- 설정 백업 — 설정 백업의 zip 파일로, 사이드바 고정 항목, 셋업, 위치, 앱 환경설정 사본도 함께 들어 있습니다.
- 변경 로그 — 앱을 통해 이루어진 변경 사항의 누적 기록입니다.
- 앱 로그 — FrontierStack 자체 로그의 zip 파일입니다.
피드마다 간격(매시간, 6시간마다, 12시간마다, 매일 또는 매주)을 설정하고, 대상 폴더를 고르고, 필요하면 내보낸 후 비우기를 켜서 복사할 때마다 원본을 교체할 수 있습니다(변경 로그와 앱 로그가 끝없이 커지지 않도록 할 때 편리합니다). 지금 내보내기는 피드를 즉시 실행하며, 각 피드에는 마지막 결과가 표시됩니다. 파일은 선택한 폴더에 FrontierStack-<feed>-<timestamp> 형식으로 저장됩니다.
이제 기계적인 도구 모음이 모두 갖춰졌습니다. 저장하고 실행하는 스크립트, 그것을 일정에 따라 실행하는 cron과 앱 동작, 단축키나 음성으로 실행하는 단축어와 Siri, 어디로든 이동하는 URL 스킴, 그리고 결과를 기기 밖으로 보내는 자동 내보내기입니다. 다음 장에서는 이 모든 것을 대신 작성하고 연결해 줄 운영자, AI 관리자를 소개합니다.
FrontierStack 사용자 설명서 · 버전 1.0.0 · 제12장