launchd를 사용하여 Mac에서 스크립트 실행 예약하는 방법

Mac 스크립트

작업을 자동화하여 스크립트를 예약하는 것은 많은 관리자들이 매일 의존하는 강력한 기능입니다. 일반 Mac 사용자들도 macOS에서 작업 자동화 및 관리에 대한 Apple의 선호 도구인 launchd를 사용하여 이 기능을 활용할 수 있습니다. 특정 시간에 Wi-Fi를 끄는 것과 같은 간단한 작업을 예약하는 것부터 복잡한 시스템 백업을 실행하는 것까지, Mac의 launchd는 작업 흐름을 자동화하고 시간을 절약하며 시스템이 원하는 대로 작동하도록 도와줍니다.

목차

  • launchd란?
  • 데몬과 에이전트
  • 스크립트 작성
  • 작업 설명
  • launchctl에 작업 로드하기
  • 자주 묻는 질문

launchd란?

오케스트라가 다양한 악기를 안내하고 조화롭게 하기 위해 지휘자가 필요한 것처럼, macOS Ventura는 수많은 프로세스와 서비스가 완벽하게 조화를 이루도록 launchd에 의존합니다. 컴퓨터를 부팅할 때 macOS 커널에 의해 처음 실행되는 프로세스인 launchd는 중심 무대에 서서 모든 후속 프로세스, 서비스 및 애플리케이션을 지휘합니다. 마치 지휘자가 교향곡의 시작을 알리는 초기 지휘봉을 들어올리는 것과 같습니다.

시스템 오케스트레이션에서의 역할을 넘어서, launchd는 특정 작업을 수행하기 위해 작성된 명령어 시리즈인 스크립트를 예약하는 데 사용될 수 있습니다. 이는 사용자가 launchd라는 지휘자와 소통하고 지시할 수 있는 인터페이스 역할을 하는 launchctl 명령을 사용하여 수행됩니다.

알아두면 좋은 점: 토렌트를 다운로드하고 있나요? Mac의 터미널을 사용하여 토렌트를 다운로드하여 효율성을 높이세요.

데몬과 에이전트

launchd는 때때로 데몬이라고 불리며, 이는 백그라운드 프로세스로 실행되는 컴퓨터 프로그램으로 일반적으로 사용자가 직접 제어하도록 설계되지 않았습니다. 데몬 중에서 launchd는 특별합니다. 왜냐하면 모든 다른 macOS 데몬의 지휘자이기 때문이며, 언제 시작하고 중지할지를 결정할 수 있습니다. 이러한 하위 데몬은 루트 사용자 아래에서 실행되므로 거의 모든 작업을 수행할 수 있습니다.

맥스웰 데몬 위키 그래픽

그러나 작업 예약에 관심이 있는 사용자로서 루트 사용자로 스크립트를 실행하는 것은 항상 바람직하거나 필요하지 않습니다. 여기서 에이전트가 등장합니다. 에이전트는 로그인한 사용자를 대신하여 실행되며, 보다 제한된 환경을 제공하고 특정 사용자의 권한 및 기본 설정으로 스크립트나 작업이 수행되도록 보장합니다. 예를 들어, 설정을 변경하거나 계정 내의 파일에 접근하는 스크립트를 실행하고 싶다면 에이전트를 사용해야 합니다.

: 좋아하는 오랜 Mac 앱 중 일부에서 호환성 문제를 겪고 있나요? 오래된 Mac에 32비트 Linux를 설치하는 방법을 알아보세요.

스크립트 작성

에이전트나 데몬을 launchd를 통해 실행하려면 스크립트를 작성해야 합니다. 가장 일반적인 스크립팅 언어는 bash입니다. bash 스크립팅에 대해 더 알고 싶다면, 초보자를 위한 bash 스크립팅 가이드를 확인할 수 있습니다.

launchd 코드 스크립트

launchd 스크립트는 에이전트로 실행될 것인지 데몬으로 실행될 것인지에 따라 두 가지 다른 위치에 저장될 수 있습니다:

  • 로그인한 사용자를 대신하여 실행될 에이전트로서의 스크립트는 “~/Library/LaunchAgents”에 저장해야 합니다.
  • 반대로, 로그인한 사용자와 관계없이 시스템 전역에서 작동하는 데몬으로서의 스크립트는 “/Library/LaunchDaemons”에 저장해야 합니다.

에이전트는 루트 권한이 없으므로 깊은 시스템 접근이 필요한 작업을 수행할 수 없습니다. 반면에 데몬은 루트 권한으로 실행되며 전체 시스템에 영향을 미치는 작업을 처리할 수 있습니다.

알아두면 좋은 점: 루트 사용자를 활성화하여 Mac에 대한 더 깊은 제어를 얻을 수 있으며, 이를 통해 전체 파일 시스템에 접근할 수 있습니다.

작업 설명

launchd 스크립트 작업 설명

launchd의 스크립트는 특정 디렉토리에 저장된 .plist 파일인 작업 정의에 의해 트리거됩니다. 이러한 XML 파일은 작업에 이름을 부여하고, 실행해야 할 스크립트를 지정하며, 스크립트가 실행되어야 할 시점을 나타냅니다. 스크립트를 작성한 후, 적절한 시간에 스크립트를 실행하는 작업 정의를 작성하고 로드해야 합니다. 작업 정의는 다음과 같은 형식입니다:

version="1.0"encoding="UTF-8"?>  
  
version="1.0">  
>  
>Label>  
>local.restart>  
>Program>  
>/Users/user/Scripts/restart.sh>  
>RunAtLoad>  
/>  
>  
>

필요에 따라 수정한 후, .plist 확장자를 가진 텍스트 파일로 저장하고 올바른 디렉토리에 드롭하세요(위 참조).

작업 설명의 몇 가지 주요 부분은 다음과 같습니다:

  • Label: launchd 내에서 작업의 이름입니다. 각 작업에 대해 고유해야 합니다. 이는 역 도메인 표기법으로 작성되며, “local”은 개인 에이전트에 적합한 도메인입니다.
  • Program: 이 작업 설명이 실행하는 스크립트의 전체 경로입니다.
  • RunAtLoad: 스크립트가 실행되어야 할 시점을 설명합니다. 여기에는 몇 가지 다른 옵션이 있습니다: - RunAtLoad: 작업 정의가 로드되자마자 실행됩니다. 로드당 한 번만 실행됩니다.
  • StartInterval: 작업을 매 n 초마다 시작합니다.
  • StartCalendarInterval: 특정 시간과 날짜에 작업을 실행합니다.

: 스크립트 파일을 위한 공간이 더 필요하신가요? Mac에서 캐시를 지우는 방법을 배워 빠르게 공간을 확보하세요.

launchctl에 작업 로드하기

launchd 스크립트 launchctl 목록

스크립트를 생성하고 에이전트를 올바른 위치에 저장한 후, 이를 launchctl에 로드해야 합니다. 이는 향후 로그인 시 자동으로 발생합니다.

현재 launchctl에서 실행 중인 내용을 보려면 터미널에서 launchctl list를 사용할 수 있습니다. 이 거대한 목록에서 다음과 같이 레이블을 붙여 스크립트를 grep할 수 있습니다:

launchctl list |grep local.restart

스크립트를 로드하려면 터미널을 열고 다음 명령을 사용하세요:

launchctl load ~/Library/LaunchAgents/local.restart.plist

launchctl 큐에서 스크립트를 제거하려면 unload 명령을 사용하세요:

launchctl unload ~/Library/LaunchAgents/local.restart.plist

작업을 로드하면 launchd 큐에 추가되며, 작업은 지정된 실행 조건에 따라 실행됩니다. 스크립트를 즉시 실행하고 싶다면 “start” 명령을 사용해야 합니다:

launchctl start local.restart

이 명령은 작업의 레이블을 사용하며, 작업이 이미 launchctl에 로드된 경우에만 작동합니다.

: Raycast 또는 Alfred를 사용하여 좋아하는 앱을 빠르게 실행하여 Mac 파워 유저가 되세요.

자주 묻는 질문

launchd가 스크립트를 시작했는지 어떻게 확인할 수 있나요?

터미널에서 launchctl list 명령을 사용할 수 있습니다. 이 명령은 모든 로드된 작업을 표시합니다. 특정 스크립트나 작업을 찾으려면 grep을 사용하세요. 예: launchctl list | grep your_script_name.

launchd가 너무 많은 시스템 리소스를 사용하고 있다면?

launchd가 과도한 리소스를 소비하는 경우, 일반적으로 잘못된 스크립트나 작업 때문입니다. 최근에 추가한 스크립트를 검토하고, launchctl unload /path/to/job.plist를 사용하여 언로드해야 합니다.

cron과 launchd의 차이점은 무엇인가요?

cron과 launchd는 모두 예약 서비스이지만, 작동 방식이 다릅니다. cron은 crontab 파일에 정의된 고정 시간이나 간격에 따라 작업을 실행하는 오래된 Unix 기반 작업 스케줄러입니다. launchd는 다양한 트리거에 따라 작업을 시작할 수 있는 Apple의 최신 시스템입니다. 단순히 시간만이 아닙니다.

launchd와 함께 bash 외의 다른 스크립팅 언어를 사용할 수 있나요?

launchd는 터미널에서 실행할 수 있는 모든 스크립트를 실행할 수 있습니다. 여기에는 Python, Perl, Ruby 및 기타 언어로 작성된 스크립트가 포함됩니다.

이미지 출처: Pexels. 모든 스크린샷은 David Morelo에 의해 촬영되었습니다.