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

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

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

출시된 것은 무엇입니까?

오케스트라가 다양한 악기를 안내하고 조화시키기 위해 지휘자가 필요한 것처럼 macOS Ventura는 무수한 프로세스와 서비스를 통해 모든 것이 완벽하게 조화를 이루도록 하기 위해 출시되었습니다. 컴퓨터를 부팅할 때 macOS 커널에 의해 실행되는 첫 번째 프로세스인 launchd는 모든 후속 프로세스, 서비스 및 응용 프로그램을 오케스트레이션하는 중앙 무대를 차지합니다. 지휘자가 초기 배턴 올리기로 심포니의 시작을 알리는 것과 같습니다.

시스템 오케스트레이션에서의 역할 외에도 launchd는 특정 작업을 수행하기 위해 작성된 일련의 명령인 스크립트를 예약하는 데 사용할 수 있습니다. 이것은 launchctl사용자가 실행되는 도체와 통신하고 지시할 수 있는 인터페이스 역할을 하는 명령을 사용하여 수행됩니다.

데몬 및 에이전트

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

맥스웰 데몬 위키 그래픽
이미지 출처: 위키피디아

그러나 작업 예약에 관심이 있는 사용자로서 루트 사용자로 스크립트를 실행하는 것이 항상 바람직하거나 필요한 것은 아닙니다. 에이전트가 역할을 하는 곳입니다. 에이전트는 로그인한 사용자를 대신하여 실행되며 보다 제한된 환경을 제공하고 특정 사용자의 권한 및 기본 설정으로 스크립트 또는 작업이 수행되도록 합니다. 예를 들어 설정을 변경하거나 계정 내의 파일에 액세스하는 스크립트를 실행하려면 에이전트를 사용합니다.

스크립트 작성

launchd를 통해 에이전트나 데몬을 실행하려면 몇 가지 스크립트를 작성해야 합니다. 가장 일반적인 스크립팅 언어는 bash입니다. bash 스크립팅에 대해 자세히 알아보려면 bash 스크립팅 초보자 가이드를 확인하세요 .

출시 코드 스크립트

시작된 스크립트는 에이전트 또는 데몬으로 실행되는지 여부에 따라 서로 다른 두 위치에 있을 수 있습니다.

  • 로그인한 사용자를 대신하여 작동하는 에이전트용 스크립트의 경우 “~/라이브러리/LaunchAgents”에 저장해야 합니다.
  • 반대로 로그인한 사용자와 관계없이 운영 체제 전체에서 데몬으로 작동하도록 의도된 스크립트는 “/Library/LaunchDaemons”에 속합니다.

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

직업 설명

시작-스크립트-작업-설명

launchd의 스크립트는 작업 정의에 의해 트리거됩니다. 특정 디렉토리에 저장된 plist 파일. 이러한 XML 파일은 작업에 이름을 지정하고 실행해야 하는 스크립트를 지정하며 스크립트를 실행해야 하는 시기를 나타냅니다. 스크립트를 작성했으면 적절한 시간에 스크립트를 시작하는 작업 정의를 작성하고 로드합니다. 작업 정의는 다음과 같습니다.

<?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>local.restart</string>
<key>Program</key>
<string>/Users/user/Scripts/restart.sh</string>
<key>RunAtLoad</key>
<true/>
</dict></plist>

필요에 따라 수정한 다음 . plist 확장자를 올바른 디렉토리에 놓기 전에 (위 참조).

작업 설명에는 몇 가지 핵심 부분이 있습니다.

  • 레이블: 시작된 작업의 이름입니다. 작업마다 고유해야 합니다. 이들은 역 도메인 표기법으로 작성되었으며 “로컬”은 개인 에이전트를 위한 훌륭한 도메인입니다.
  • 프로그램: 이 작업 설명이 시작하는 스크립트의 전체 경로입니다.
  • RunAtLoad: 스크립트를 실행해야 하는 시기를 설명합니다. 여기에는 몇 가지 다른 옵션이 있습니다.
    • RunAtLoad: 작업 정의가 로드되는 즉시 실행됩니다. 로드당 한 번만 실행됩니다.
    • StartInterval: n초마다 작업을 시작합니다. 이 예에서는 7200초마다 또는 2시간마다 작업을 실행합니다.<key>StartInterval</key> <integer>7200</integer>
    • StartCalendarInterval: 특정 시간과 날짜에 작업을 실행합니다. 아래 코드는 매일 오전 9시에 작업을 실행합니다.<key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>9</integer> <key>Minute</key> <integer>0</integer> </dict>

launchctl에 작업 로드

시작-스크립트-launchctl-목록

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

laucnhctl에서 현재 실행 중인 항목을 보려면 launchctl list터미널에서 사용할 수 있습니다. 이 거대한 목록은 다음과 같이 레이블을 지정하여 스크립트에 사용할 수 있습니다.

launchctl list | grep local.restart

스크립트를 로드하려면 터미널을 열고 다음 명령을 사용하십시오.

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

시작-스크립트-launchctl-로드

launchctl 대기열에서 스크립트를 제거하려면 다음 unload명령을 사용하십시오.

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

launchd-scripts-launchctl-unload

작업을 로드하면 시작된 대기열에 들어가고 작업은 시작 조건에 지정된 시간에 실행됩니다. 무슨 일이 있어도 즉시 스크립트를 실행하려면 “start” 명령을 사용해야 합니다.

launchctl start local.restart

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

자주 묻는 질문

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의 최신 macOS용 시스템입니다.

launchd와 함께 bash 외에 다른 스크립팅 언어를 사용할 수 있습니까?

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

이미지 크레디트: Pexels . David Morelo의 모든 스크린샷.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다