代码之家  ›  专栏  ›  技术社区  ›  DevMan

Golang webapp的systemd服务中ExecStart失败

  •  0
  • DevMan  · 技术社区  · 3 年前

    我是刚到golang的,正在尝试在我的服务器上托管一个简单的网站。

    我在Ubuntu 18.04上

    我的域根目录位于 /var/www/vhosts/mydomain.com/mydomain.com

    我有一个 main.go 在浏览器中呈现简单Hello World的文件。

    当我 go run main.go 从该目录中,该网页工作正常。

    现在,我正在尝试创建一个服务,以便在关闭 shell .

    为此,我创建了一个 service 打电话 golangweb.service /etc/systemd/system .

    该文件中的内容是:

    [Unit]
    Description = Go Server
    
    [Service]
    ExecStart=/var/www/vhosts/mydomain.com/mydomain.com
    Type=simple
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    

    保存文件后,我按顺序插入folling命令:

    sudo systemctl daemon-reload
    sudo systemctl enable golangweb.service
    sudo systemctl start golangweb.service
    sudo systemctl status golangweb.service
    

    当我尝试获取状态时,我得到以下错误(我在那里删除了一些数据):

     golangweb.service - Go Server
       Loaded: loaded (/etc/systemd/system/golangweb.service; enabled; vendor preset: enabl
       Active: activating (auto-restart) (Result: exit-code) since Fri xx-xx-xx 23:43:52
      **Process: xx ExecStart=/var/www/vhosts/mydomain.com/mydomain.com (code=exited, sta
     Main PID: xx (code=exited, status=203/EXEC)**
    
    Mai xx xx:xx:xx xxxxx.xxxx.xxxx.systemd[1]: golangweb.service: Failed with re
    Warning: Journal has been rotated since unit was started. Log output is incomplete or u
    lines 1-8/8 (END)
    ● golangweb.service - Go Server
       Loaded: loaded (/etc/systemd/system/golangweb.service; enabled; vendor preset: enabled)
       Active: activating (auto-restart) (Result: exit-code) since Fri xx-xx-xx xx:xx:xx CEST; 3s ago
      Process: xx ExecStart=/var/www/vhosts/mydomain.com/mydomain.com (code=exited, status=203/EXEC)
     Main PID: xx (code=exited, status=203/EXEC)
    
    Mai xx xx:xx:xx xxxx.xx.xx xx[1]: golangweb.service: Failed with result 'exit-code'.
    Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
    

    有人知道为什么会这样吗?

    1 回复  |  直到 3 年前
        1
  •  1
  •   larsks    3 年前

    的第一个参数 ExecStart 需要是可执行文件。看起来您已将其设置为目录。如果你试着打字 /var/www/vhosts/mydomain.com/mydomain.com 在shell提示下,您将看到类似的行为:无法运行目录。

    能够 设置:

    WorkingDirectory=/var/www/vhosts/mydomain.com/mydomain.com
    ExecStart=/usr/bin/go run main.go
    

    或者,您可以编译代码( go build ),然后设置 执行开始 到已编译二进制文件的完整路径:

    ExecStart=/var/www/vhosts/mydomain.com/mydomain.com/compiledprogramname