Как настроить файл сервисного демона для программы Golang - PullRequest
0 голосов
/ 08 апреля 2020

Это служебный файл для php, он хорошо работает

[Unit]

[Service]
ExecStart=/usr/bin/env php /path/to/server.php

[Install]

Этот файл предназначен для python

[Единица измерения]

[Service]
ExecStart=/usr/bin/python3 /path/to/server.py

[Install]

Когда я пытаюсь это сделать для Golang, это не работает, что случилось г?

[Unit]

[Service]
ExecStart=/usr/bin/go /path/to/server.go
Environment=GOPATH="/home/test/go"

[Install]

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Python и PHP являются интерпретируемыми языками, что означает, что их необходимо запускать через программу, называемую интерпретатором (для PHP это /usr/bin/php и для Python /usr/bin/python), которая принимает исходный код (ваш * 1003) * или .py файл) и интерпретирует его (переводит исходный код в машинный код, понятный компьютеру во время работы). Поэтому всем, кто хочет запустить вашу программу, нужны:

  1. ваша программа (исходный код .py файлы)
  2. любые библиотеки, которые вы использовали
  3. интерпретатор

Golang не так, это скомпилированный язык (например, C или C ++). В случае скомпилированных языков у вас есть программа под названием compiler, которая берет исходный код (ваш файл .go) и создает (компилирует) двоичный файл, непосредственно понятный любому компьютеру того же класса (с таким же или совместимым процессором, ОС и т. Д. c). .) без необходимости какого-либо интерпретатора или компилятора. В Golang для большинства случаев все используемые вами библиотеки также скомпилированы в этот двоичный файл, что делает его очень удобным и легким для пользователей.

В Golang вместо использования команды go run, которая является ярлыком для скомпилировать и выполнить один раз. Вы хотите завершить sh кодирование, затем скомпилировать программу с помощью команды go build в исполняемую форму (для Windows это файл .exe и для Linux, который будет двоичным - исполняемый файл без расширения), а затем выполнить это из вашего служебного файла.

Предположим, что ваш файл кода server.go:

  1. go build -o server server.go скомпилирует ваш исходный код и создаст исполняемый файл с именем server (мы принудительно установили команду go build назвать его server, добавив -o server)
  2. Вы можете запускать ./server столько раз, сколько хотите.
  3. Если вам нужно обновить код, то вам также необходимо повторно запустите go build -o server server.go, и это сгенерирует обновленный двоичный файл. Это немного отличается от PHP или Python (так что будьте осторожны с этим).

Затем вы просто обновляете свой служебный файл (см. go совсем не нужно):

[Service]
ExecStart=/path/to/server

[Install]

Компиляция кода из служебного файла не очень хорошая идея, так как для этого требуется go, установленный на машине, на которой запущена программа. Также в Golang программы часто извлекают библиотеки из Github, и если кто-то изменяет библиотеку, чтобы ваша программа больше не компилировалась, служба не запускается.

0 голосов
/ 08 апреля 2020

Сработало после попытки каждого вывода из whereis go это файл конфигурации для Golang:

ExecStart=/usr/local/go/bin/go run /home/testbed/Desktop/test/test.go 
...