Есть приложение на golang. С кучей файлов.
Я могу конечно в рабочей директории прописать go install.
Но тогда упадет консоль, а как это скомпилировать в один файл и запускать вместе с сервером?
Michael Landau: это уже к языку никак не относится. А зависит от вашей задачи.
1. Если по уму, то вы должны форк делать у вас в коде и оставлять ваш процесс в виде демона.
2. Второй вариант: надо писать форкающий сервис для systemd.
3. Запускаться в screen или tmux
4. И самый тупой вариант: запускаться через & в конце команды
Дмитрий: я вот сейчас со вторым вариантом разбираюсь. Но тут путаницы для новичка много. Можете пожалуйста основной алгоритм этих systemd объяснить.
Я пока только до создания сервиса дошел.
То есть я создал в каталоге - "/etc/systemd/system" файл - "go-work.service", а что дальше делать не знаю.
Дмитрий: по факту есть - "/root/work/src/app/project" - это директория go проекта. Там есть бинарник
- "project", полученный через go build. Знаю, что могу запустить это всё вот так:
$ cd /root/work/src/app/project
$ project
Но в таком случае консоль будет мониторить go приложения. И если я закрою консоль или выйду (ctrl+c). То проект перестанет работать.
Вот как с systemd всё сделать?
Откуда я могу знать, что вам нужно и что вообще за сервис запускается.
Systemd вам поможет, только если вы корректно обрабатываете SIGINT, SIGTERM и ко.
Запустите в сессии tmux и не парьтесь, если нет желания разбираться.
Александр Павлюк: как это через systemd сделать? Уже 3 часа мучаюсь мозг себе сломал.
Всё время выдаёт вот такую шляпу:
"Warning: go-work.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Job for go-work.service failed because the control process exited with error code. See "systemctl status go-work.service" and "journalctl -xe" for details."