IT Diary/# Dev Diary

Mac OS 에서 LaunchAgents 사용해보기

셜록호움즈 2023. 9. 10. 19:29
728x90
반응형

맥북에서 crontab을 통해 주기적으로 실행을 시켜보고싶은게 생겨서

crontab을 등록하여 테스트를 해보았더니 잘 작동이 되지않아서 찾아보니

macOS에서는 crontab 보다는 LaunchAgents를 통해 crontab의 역할을 한다고 한다.

 

 

하고싶었던 작업은 매일 오전10시에 어떤 작업을 수행할 것

* crontab 이라면 아마 이렇게 crontab -e 로 등록해서 사용했을 것 같다. 

0 7 * * * cd 실행할위치 && 실행하고싶은 명령어

사용방법

앞서 말했든 macOS에서는 crontab 보다는 LaunchAgents를 권장하고 있고 해당 방법은 간단하다

 

1. .plist 파일 작성:
 ~/Library/LaunchAgents/${너가수행할이름}.plist라는 파일을 생성

2. 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>본인의프로젝트명</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>-c</string>
        <string>cd 실행할위치 && 실행할명령어</string>
    </array>
    
    <key>StartInterval</key>  //실행간격
    <integer>120</integer>    //120초 (2분)
</dict>
</plist>

3. 내가 만든 plist가 잘 작성되었는지 확인
plutil -lint ${너가수행할이름}.plist
정상적으로 잘 만들어졌으면 => ${너가수행할이름}.plist: OK

4. plist load 
launchctl load ~/Library/LaunchAgents/${너가수행할이름}.plist

5. 등록이 잘되었는지 확인
launchctl list | grep ${너가수행할이름}


6. 만약 등록을 취소하고싶다면
launchctl unload ~/Library/LaunchAgents/${너가수행할이름}.plist

 

테스트를 위해 2분마다 실행되도록 plist를 만들었다.

 

 

여기서 내가 했던 실수들

1. <string>cd 실행할위치 && 실행할명령어</string> 여기서 && 를 xml 문법에 맞게 &amp;로 바꿔줬어야 했다. 

2. 처음에는 yarn start라고 실행할 명령어를 썻는데 fail이 떨어졌다 그래서 Full Path 로 변경 :   /opt/homebrew/bin/yarn start 

 

실수들에 대해서 수정을 하니 테스트가 잘 돌아간다. 

그래서 처음 계획했던 매일 오전 10시에 돌아갈 수 있도록 

실행 부분을 변경해주었다. 

    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>10</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>

 

728x90
반응형