Как настроить уже запущенный бинарный файл для запуска при запуске - PullRequest
0 голосов
/ 31 мая 2019

У меня есть программа Go, которая должна запускаться как демон с минимальным внешним интерфейсом для пользователя (просто значок на панели задач).

Тот факт, что он написан на Go, на самом деле не имеет большого значения, главная проблема, которую я имею, - заставить двоичный файл (который уже запущен) запускаться при запуске на Mac.

Я могу настроить запуск двоичного файла при запуске следующим образом:

cp daemon.plist ~/Library/LaunchAgents/daemon.plist

(cp список в каталоге LaunchAgents)

launchctl load -w ~/Library/LaunchAgents/daemon.plist

(затем загрузить список с launchctl.)

И это прекрасно работает. Единственная проблема заключается в том, что launchctl load запускает другой экземпляр двоичного файла, который уже работает . Я хочу иметь возможность включать (и отключать) запуск двоичного файла при запуске для исполняемого двоичного файла без запуска другого его экземпляра.

А вот файл .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>Label</key>
    <string>daemon</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/Daemon.app/Contents/MacOS/daemon</string>
    </array>
    <key>ProcessType</key>
    <string>Interactive</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

1 Ответ

0 голосов
/ 31 мая 2019

Я понял это.

Итак, во-первых, двоичный файл работает. Он запускается как не включен для запуска при запуске. Для инициализации вы cp plist в каталог ~/Library/LaunchAgents/:

cp daemon.plist ~/Library/LaunchAgents/daemon.plist

А 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>Label</key>
    <string>daemon</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/Daemon.app/Contents/MacOS/daemon</string>
    </array>
    <key>ProcessType</key>
    <string>Interactive</string>
    <key>RunAtLoad</key>
    <false/>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

ПРИМЕЧАНИЕ. Клавиша RunAtLoad установлена ​​на false.

Затем мы загружаем его в launchctl:

launchctl load -w ~/Library/LaunchAgents/daemon.plist

Не должен загружаться, поскольку RunAtLoad установлен на false.

Затем мы можем включить и отключить запуск при запуске следующим образом:

Для включения:

  • Установить RunAtLoad на true
  • cp plist более

Для отключения:

  • Установить RunAtLoad на false
  • cp plist более

Хак, но это работает.

...