2015-07-20 2 views
-4

Я только начал изучать golang, и я хочу попытаться создать домашнюю страницу hello world в соответствии с here. Однако, когда я использую run или build через SSH, я не «восстанавливаю» управление приглашением.Building Go app

enter image description here

Если я Ctrl + C, мое приложение больше не будет работать, я думаю, что я имею в непонимании, как идти работать

+0

Является ли 'index' ваше имя приложения? Скомпилированный исполняемый файл Go обычно является обычным исполняемым файлом, который читает/записывает в stdin/stdout, открывает сокеты и т. Д. –

+0

@AlexAtNet да, мое приложение называется index.go – user2650277

+3

'index' работает на переднем плане,' Ctrl + C' отправляет SIGINT, чтобы «index» завершил процесс. – jmaloney

ответ

0

Обратите внимание, что если вы выполните 0-процесс, он будет работать «бесконечно», пока вы не назовете на него kill <PID>. Кроме того, если он связывается с HTTP-портом, вам нужно запомнить, как убить текущий процесс, иначе ваш новый/перестроенный процесс не сможет связываться.

Использование чего-то простого, такого как Supervisor (guide here), или daemontools - более разумный способ запуска процессов управления. Вот быстрый руководитель конфигурации для приложения Go:

[program:index] 
command=/home/yourappuser/bin/index 
autostart=true 
autorestart=true 
startretries=10 
# the user your app should run as (i.e. *not* root!) 
user=yourappuser 
# where your application runs from 
directory=/srv/www/yourapp.com/ 
# environmental variables 
environment=APP_SETTINGS="/srv/www/yourapp.com/prod.env" 
redirect_stderr=true 
# the name of the log file. 
stdout_logfile=/var/log/supervisor/yourapp.log 
stdout_logfile_maxbytes=50MB 
stdout_logfile_backups=10 

Это будет работать, если приложение Go не нужно выполнить привязку к порту 80. Если это не делает, используйте setcap (и не запускать приложения как корень) с setcap cap_net_bind_service=+ep /home/yourappuser/bin/index.

1

Вы можете использовать nohup для этого, как это:

nohup ./index &

nohup используется для предотвращения завершения процесса после выхода пользователя из системы и & используется для запуска процесса в фоновом режиме. После этого вы можете выйти из консоли.

+3

Обратите внимание, что если вы 'nohup', процесс будет работать« неопределенно », пока вы не назовете' kill 'на него. Кроме того, если он связывается с HTTP-портом, вам нужно запомнить, как убить текущий процесс, иначе ваш новый/перестроенный процесс не сможет связываться. Используя что-то простое, например Supervisor ([здесь] (https://elithrar.github.io/article/running-go-applications-in-the-background/)), или daemontools - более разумный способ запуска процессов управления. – elithrar

+0

@elithrar это именно то, что мне нужно. Спасибо за ваш проводник и любезно опубликуйте выше, как ответ на мой вопрос, чтобы я мог его принять – user2650277

Смежные вопросы