맥오에스에서 launchd로 서비스 띄우기

dev | 2025-02-18

맥오에스에서 systemd와 같은 역할을 하는 기능이 있나 찾아보니 launchd가 있다고 한다. Launchd는 에이전트(agent)와 데몬(daemon) 두가지로 띄울 수 있는데 에이전트는 사용자 계정을 로그인 했을 때 뜨게 되고 데몬은 맥이 부팅되면 뜨게 된다. 에이전트는 ~/Library/LaunchAgents/에 넣고 데몬은 /Library/LaunchDaemons/에 넣는다. 데몬은 root 권한이 필요하다.

형식은 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>com.beszel.beszel-agent</string>

	<key>ProgramArguments</key>
	<array>
		<string>/Users/hyeonseok/beszel-agent</string>
	</array>

	<key>EnvironmentVariables</key>
	<dict>
		<key>PORT</key>
		<string>45876</string>
		<key>KEY</key>
		<string>ssh-ed25519 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+aaaaaaaaaaaaaaaaaaaaaaa</string>
	</dict>

	<key>RunAtLoad</key>
	<true/>

	<key>KeepAlive</key>
	<true/>
</dict>
</plist>

서비스 등록과 해제는 launchctl 명령을 이용한다.

sudo launchctl load /Library/LaunchDaemons/com.beszel.beszel-agent.plist
sudo launchctl unload /Library/LaunchDaemons/com.beszel.beszel-agent.plist

서비스로 등록이 됐는지는 list를 이용해서 확인할 수 있다.

sudo launchctl list | grep beszel-agent

데몬으로 등록할 plist를 사용자 디렉토리 아래에 넣으면 접근이 되지 않을 수 있다니 주의해야 한다. 파일볼트가 활성화되어 있으면 로그인을 해야 데몬으로 기동이 되기 때문에 확인이 필요하다.

노드 서버를 launchd로 띄울까 고민했었는데 챗지피티의 꼬임에 넘어가서 우분투로 밀까 생각중이다.

Comments

Post a comment

:

: 공개 되지 않습니다. Gravatar를 표시 합니다.

:

: HTML 태그를 사용할 수 없습니다.