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

Автор: | 06/20/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>

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

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

Запускаем:

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

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

Проверяем:

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

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

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

И в самом Jenkins:

macmini_s — вот он.

Готово.