macOS: launchctl – запуск/остановка сервисов на примере Jenkins slave агента

Автор: | 20/06/2018

Искал аналог systemctl для systemd или service для Upstart, но под macOS, что бы можно было запускать сервис из консоли, нагуглился такой сервис как launchctl, который является частью launchd.

Для примера возьмём plist-файл из комментария к посту Jenkins: macOS slave агент через Java Web Start.

Другие примеры plist-файлов есть тут>>>., описание ключей – на странице Configuration домашней страницы проекта launchd.

Создаём файл сервиса – /Library/LaunchDaemons/com.jenkins.slave.plist:

<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.jenkins.slave</string>
        <key>UserName</key>
        <string>jenkins</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/bin/java</string>
                <string>-jar</string>
                <string>/Users/jenkins/agent.jar</string>
                <string>-jnlpUrl</string>
                <string>https://jenkins.domain.pro/computer/macmini_s/slave-agent.jnlp</string>
                <string>-secret</string>
                <string>137***867</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>StandardOutPath</key>
        <string>/Users/jenkins/jenkins-slave-stdout.log</string>
        <key>StandardErrorPath</key>
        <string>/Users/jenkins/jenkins-slave-error.log</string>
</dict>
</plist>

Проверяем синтаксис:

[simterm]

bash-3.2# plutil /Library/LaunchDaemons/com.jenkins.slave.plist
/Library/LaunchDaemons/com.jenkins.slave.plist: OK

[/simterm]

Запускаем:

[simterm]

bash-3.2# launchctl load /Library/LaunchDaemons/com.jenkins.slave.plist

[/simterm]

Если запустился успешно – в консоль ничего не выводится.

Проверяем:

[simterm]

bash-3.2# ps aux | grep java
jenkins          23468  37.0  1.1  6039356  90872   ??  Rs    5:12PM   0:01.87 /usr/bin/java -jar /Users/jenkins/agent.jar -jnlpUrl https://jenkins.domain.pro/computer/macmini_s/slave-agent.jnlp -secret 137***867

[/simterm]

Или через сам launchctl:

[simterm]

bash-3.2# launchctl list | grep jenkins
23468   0       com.jenkins.slave

[/simterm]

И в самом Jenkins:

macmini_s – вот он.

Готово.