Computer >> 컴퓨터 >  >> 체계 >> MAC

macOS에서 launchd를 사용하여 일정에 따라 스크립트를 실행하는 방법

macOS에서 launchd를 사용하여 일정에 따라 스크립트를 실행하는 방법

launchd는 스크립트와 프로세스를 시작, 중지 및 관리하기 위한 도구입니다. Linux 버전에 관계없이 작업했다면 cron에 익숙할 것입니다. launchd는 기본적으로 macOS에서 cron입니다.

데몬이란 무엇입니까?

macOS에서 launchd를 사용하여 일정에 따라 스크립트를 실행하는 방법

데몬("데몬"으로 발음)은 백그라운드에서 실행되는 스크립트입니다. 응용 프로그램과 달리 데몬은 프로세스로 실행되며 사용자나 다른 응용 프로그램의 직접적인 제어 하에 있지 않습니다. macOS에서는 시작 및 중지 시점을 결정하는 launchd 프레임워크의 명령을 받습니다.

특이한 이름은 열역학 사고 실험에서 분자를 분류하는 가상 에이전트인 Maxwell의 악마에서 따왔습니다.

스크립트 작성

macOS에서 launchd를 사용하여 일정에 따라 스크립트를 실행하는 방법 macOS에서 launchd를 사용하여 일정에 따라 스크립트를 실행하는 방법

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

launchd 사용

macOS에서 launchd를 사용하여 일정에 따라 스크립트를 실행하는 방법

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

작업 정의는 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://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인 텍스트 파일에 저장한 다음 올바른 디렉토리에 놓으십시오(아래 참조).

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

  • 레이블: launchd 내의 작업 이름입니다. 각 작업에 대해 고유해야 합니다. 이들은 역 도메인 표기법으로 작성되며 "로컬"은 개인 에이전트에게 좋은 도메인입니다.
  • 프로그램: 이 작업 설명이 실행되는 스크립트의 전체 경로입니다.
  • RunAtLoad: 스크립트를 실행해야 하는 시기를 설명합니다. 여기에는 몇 가지 다른 옵션이 있습니다.
    • RunAtLoad :작업 정의가 로드되는 즉시 실행됩니다. 로드당 한 번만 실행됩니다.
    • 시작 간격 :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>

에이전트 대 데몬

직업 설명을 작성한 후에는 적절한 디렉토리에 저장해야 합니다.

launchd는 에이전트와 데몬을 더 구분합니다. 에이전트는 로그인한 사용자를 대신하여 실행되고 데몬은 루트 사용자로 실행됩니다. 즉, 스크립트를 특정 사용자 계정으로 제한하려는 경우 에이전트를 사용할 수 있습니다. 로그인한 사람에 관계없이 무언가를 실행하려면 데몬을 사용합니다.

에이전트와 데몬의 차이점은 컴퓨터에 저장된 위치에서 나타납니다.

  • "~/Library/LaunchAgents"는 로그인한 사용자를 대신하여 실행됩니다.
  • "/Library/LaunchDaemons"는 루트 사용자를 대신하여 실행됩니다.

올바른 위치에 plist를 저장해야 합니다.

launchctl에 작업 로드

macOS에서 launchd를 사용하여 일정에 따라 스크립트를 실행하는 방법

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

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

launchctl list | grep local.restart

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

launchctl load ~/Library/LaunchAgents/local.restart.plist
macOS에서 launchd를 사용하여 일정에 따라 스크립트를 실행하는 방법

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

launchctl unload&nbsp;~/Library/LaunchAgents/local.restart.plist
macOS에서 launchd를 사용하여 일정에 따라 스크립트를 실행하는 방법

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

launchctl start local.restart

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

결론

launchd를 사용하여 파일 정리, 일정에 따라 서버 다시 시작 또는 특정 파일이 나타날 때 응용 프로그램 실행과 같은 작업을 수행하는 스크립트를 만들 수 있습니다. launchd에 대해 자세히 알아보려면 laucnhd 자습서를 확인하세요.