@amalygin

Как запустить приложение Go через start-stop-deamon?

Написал приложение на Go, которое каждые 20 секунд делает http запрос. В папке с исходниками делаю go build. Потом запускаю исполняемый файл и все работает пока работает терминал. Суть приложения в том, что оно каждые 20 сек делает запрос и если в ответ получает токены apns, то отправляет пуш уведомление заданного формата на все устройства. Самая главная проблема, как запустить через deamon приложение, чтобы оно не зависело от терминала?
При запуске через start-stop-deamon выдается ошибка: Could not create clientopen resources/pushcert.pem: no such file or directory. Это apns сертификат, который лежит в папке resources, сама папка лежит рядом с исполняемым файлом.
Команда, которую выполняю в терминале:
start-stop-daemon -Sbvx /root/go/src/myapp/myapp

Подскажите, как правильно прописывать пути к файлам ресурсов в Go и как запускать приложение не зависящее от терминала.
  • Вопрос задан
  • 1183 просмотра
Решения вопроса 2
@abcyu
Разработчик
Для запуска демоном можно воспользоваться внешними средствами, которые умеют как демон запускать обычные программы.
Конкретно для Go есть пакеты, их минимум 3 штуки разных и еще штук 6 их клонов. Например: https://github.com/takama/daemon (конкретно этот мне чем-то не понравился, я другой использую, попроще, но и постабильнее https://github.com/VividCortex/godaemon )

А в вашем случае просто нет прав к каталогу (под демоном программа с какими правами-то запускается, как сами думаете-то? ) или путь не может найти.

Для начала попытайтесь прописать полный путь, не от текущего каталога программы, а от корня - и проверить.
Ответ написан
На CentOS можно использовать systemd для запуска программы как демона.
Вот был подобный вопрос
Развертывание web приложения на Go?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@milast
Быть может и не стоит делать из приложения демона?
nohup /root/go/src/myapp/myapp &

И всё, больше от терминала не зависим.
Убить процесс так же просто:
pkill myapp

Или сперва узнаем pid процесса и по нему завершим его:
ps -A | grep myapp

увидим примерно следующее:
1782 ? 00:00:09 myapp

далее завершим процесс
kill 1782

И не нужны никакие демоны.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы