- @참고 : https://medium.com/@fahimhossain_16989/adding-startup-scripts-to-launch-daemon-on-mac-os-x-sierra-10-12-6-7e0318c74de1

 

Adding Startup Scripts to Launch Daemon on Mac OS X Sierra 10.12.6

Being new to working on OS X, it has been somewhat confusing to how things work on Mac compared to that on Linux — to be completely honest…

medium.com

OS X에서 작업을 시작하는 것은, 리눅스와 비교하여 맥에서 작동하는 방식이 다소 혼란스러웠습니다. 완전히 정직하게 말하면 시스템 간의 차이를 둘러보면서 힘든 여행이었습니다.

OS X Sierra의 Launch Daemon에 스타트업 쉘 스크립트를 추가하는 것과 관련된 내 경험을 공유하고자 합니다. 더 나은 솔루션에 대한 제안을 환영합니다.

Launch Daemon Process에 대한 정보를 얻을 수 있는 좋은 출발점 - 여기에서 구성하는 법, 문제 해결 및 몇 가지 예를 찾을 수 있습니다.

Daemon 이란
데몬은 사용자 입력 없이 백그라운드에서 실행되는 프로그램입니다.

해결해야할 과제

  1. mariaDB를 시작하기 위한 셸 스크립트 파일 작성 (데모의 단순화를 위해)
  2. 컴퓨터가 부팅 되자마자 셸 스크립트 파일 실행 (예: 사용자가 로그인 하지 않아도 됨)

시작해봅시다

1단계 : 터미널을 사용하여 셸 스크립트 파일을 만듭니다.

vim ~/scripts/startup/startup.sh

이제 다음 코드를 파일에 추가하고 저장하고 종료합니다. 이는 mariadb 서비스의 활성화 여부를 우선적으로 체크하고 중지 된 경우 서비스를 시작합니다.

#!bin/bash
#Start Mariadb Server only if it is not running
if [ "$(ps -ef | grep -v grep | grep mariadb | wc -1)" -le 0 ]

then

# Note starting mariadb not as a sudoer
mariadb start
echo "Mariadb Server Started"

else
 echo "Mariadb Server Already Running"
 
fi

스크립트 파일에 실행 허락을 부여합니다.

chmod +x ~/scripts/startup/startup.sh

2단계 :  컴퓨터가 부팅되는 즉시 셸 스크립트 파일을 시작합니다.

이제 Launch Daemon 프로세스에 스크립트 파일을 추가해야합니다. 이 프로세스는 Mac이 부팅되자마자 작업(Job)을 실행합니다.

업무(Job) 정의
데몬 / 에이전트의 동작은 속성 목록(property list)라는 특수 XML 파일에 지정되어 있습니다. 저장된 위치에 따라 데몬이나 에이전트로 처리됩니다.

다시, 데몬 / 에이전트 간 차이를 명확하게 하기 위해:

가장 큰 차이점은 에이전트는 로그인한 사용자 대신 실행되는 반면 데몬은 루트 사용자 또는 UserName 키로 지정한 사용자 대신 실행된다는 것입니다.

Mac OS X에서, Launch Daemon은 다음 폴더 내부에 저장되어 있습니다.

/Library/LaunchDaemons/

 

반면에 Launch Agent는 다음 폴더 내부에 저장되어 있습니다.

/Library/LaunchAgents/

이제, 루트 사용자로 property list 파일(.plist)을 작성합시다. (이 글의 범위를 벗어난 plist 파일의 이름을 지정하는 규칙이 있습니다.)

sudo vim /Library/LaunchDaemons/com.startup.plist

plist 파일의 구성은 사용 사례에 따라 다릅니다. 구성 할 수 있는 프로퍼티 목록은 launchd.info의 구성 섹션에 다시 잘 설명되어 있습니다.

보다 쉬운 설명을 위해, 아래 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>EnvironmentVariables</key>
        <dict>
        	<key>PATH</key>
            <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:sbin:</string>
        </dict>
        <key>Label</key>
        <string>com.startup</string>
        <key>Program</key>
        <string>/Users/admin/Scripts/startup/startup.sh</string>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <false/>
        <key>LaunchOnlyOnce</key>
        <true/>
        <key>StandardOutPath</key>
        <string>/tmp/startup.stdout</string>
        <key>StandardErrorPath</key>
        <string>/tmp/startup.stderr</string>
        <key>UserName</key>
        <string>admin</string>
        <key>GroupName</key>
        <string>admin</string>
        <key>InitGroups</key>
        <true/>
    </dict>
</plist>

이제 모든 필요한 파일을 갖췄으므로, 프로퍼티 리스트 파일을 launchctl에 다음과 같이 추가해야합니다.

# -w flag permanently adds the plist to the Launch Daemon
sudo launchctl load -w /Library/LauchDaemons/com.startup.plist

다른 메모,

  • plist를 Launch Daemon에서 영구적으로 제거하려면
# -w flag permanently remove the plist to the lauch Daemon
sudo launchctl unload -w /Library/LauchDaemons/com.startup.plist
  • 스크립트가 Launch Daemon에 추가되면 사용자가 다음 커맨드를 실행하더라도 자동 시작될 것입니다.
# Will only temporarily stop. It will again auto launch unless the service is explicitly stopped using launchctl unload command mariadb stop

#You can stop the launchctl process by
#sudo launchctl stop /Library/LaunchDaemons/com.startup.plist

#You can start the launchctl process by
#sudo launchctl start -w /Library/LaunchDaemons/com.startup.plist
  • 소스 파일의 요지가 여기에 제공됩니다.

그게 답니다!

당신에게 잘 작동하는지 알려주세요. 개선에 대한 제안은 높이 평가될 겁니다.

출처:

1. Launchd 튜토리얼

블로그 이미지

uchacha

개발자 일지

,