맥오에스에서 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