Запустите процесс в фоновом режиме и выйдите из установщика .pkg в MacOS (скрипт postinstall bash) - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь «запустить и забыть» исполняемый файл в скрипте postinstall bash установщика пакетов в MacOS. Для краткости мы написали приложение и сервис в Golang. В настоящее время во время установщика (который просто встраивается в установочный файл .pkg с использованием pkgbuild, а затем подписывается и заверяется нотариально), он запускает приложение - давайте назовем это приложение myapp - выполняет несколько шагов настройки конфигурации системы и, по сути, запускает службы - скажем, myservice, когда они будут сделаны. Оба эти варианта работают просто отлично .

Однако бывают случаи, когда myapp занимает немного больше времени, чем ожидалось. По сути, я хотел сказать установщику, чтобы он сбросил myapp и забыл об этом, поскольку myapp ведет свою собственную регистрацию и обработку ошибок, и в настоящее время в сценарии postinstall bash установщика pkg он просто будет ждать до тех пор, пока Приложение, которое вы запускаете, завершает работу.

Сценарий постинсталляции относительно прост (очевидно, урезан):

#!/usr/bin/env bash

# Does some stuff that's not relevant
...

# Kick off the go setup in the background
sudo bash -c "nohup sh -c '/opt/com.company.setup/myapp' &"

# More stuff that's not relevant
...

Теперь эту команду нужно выполнить как sudo (это то, что наш клиент хочет, и опять же он работает очень хорошо в большинстве случаев, попытка заставить его работать и забыть - это проблема, с которой я столкнулся), и после ее запуска я просто хочу выйти из установщика и продолжить его работу. По какой-то странной причине у меня возникает эта проблема, когда установщик pkg все равно убивает процесс, независимо от того, сколько вариантов запуска процесса в фоновом режиме я пробую - Вот кто-то с похожей проблемой , но они пытаются сделать это с помощью службы, я просто пытаюсь запустить exe.

Итак, я провел кучу исследований, но не могу найти решения моей конкретной проблемы c , Я нашел несколько команд для попытки запуска программы в фоновом режиме, например:

sudo bash -c "nohup sh -c '/opt/com.company.setup/myapp' &"
sudo sh -c '/opt/com.company.setup/myapp &'
sudo sh -c 'nohup /opt/com.company.setup/myapp & disown'
sudo /opt/com.company.setup/myapp & disown

et c. Все эти запускают приложение, но все они ie сразу после закрытия установщика. И я могу сказать, что он запускается, потому что, как я уже говорил, он ведет свою собственную регистрацию, и я добавил инструкцию log и спящий режим в самом начале, но он никогда не выходит из спящего режима, потому что процесс завершен.

У кого-нибудь есть идеи, как запустить приложение и позволить программе установки выйти из через bash или zsh? У меня есть гибкость, чтобы использовать либо или, просто нужно найти решение для этого.

Вот лишь несколько дополнительных ссылок материала, которые я пробовал в качестве примеров, потому что я исследовал: Запуск процесса в фоновом режиме после закрытия терминала https://superuser.com/questions/448445/run-bash-script-in-background-and-exit-terminal

...