Я пытаюсь «запустить и забыть» исполняемый файл в скрипте 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