私はsystemdを使用するとgolang Webアプリケーションを起動できませんが、手動で起動すると正常に動作します。私のシステム構成の問題は何ですか? env GOOS=linux GOARCH=amd64 go build -v bitbucket.org/myapp/backend
なぜsystemdがgolang Webアプリケーションを起動できないのですか
にsystemdサービスのステータス
$ sudo service goweb status
Redirecting to /bin/systemctl status goweb.service
● goweb.service - Backend service
Loaded: loaded (/usr/lib/systemd/system/goweb.service; disabled; vendor preset: disabled)
Active: inactive (dead)
May 18 10:55:56 instance-1 systemd[1]: Started Backend service.
May 18 10:55:56 instance-1 systemd[1]: Starting Backend service...
P/S:それLO
$ cat goweb.service
[Unit]
Description=Backend service
After=network.target
[Service]
User=myapp
Group=myapp
Restart=on-failure
ExecStart=/u01/backend
[Install]
WantedBy=multi-user.target
backend
goweb.serviceはコマンドでコンパイルされたバイナリファイルです。私のWebアプリのようなオークは始まったが、すぐに停止した。
設定Type=forking
を試してみると、サービスの状態が以下のように表示されます。ログStarted Backend service.
とStarting Backend service...
の順序が逆になった理由を説明できますか?
$ sudo service goweb status
Redirecting to /bin/systemctl status goweb.service
● goweb.service - Backend service
Loaded: loaded (/usr/lib/systemd/system/goweb.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Wed 2016-05-18 11:06:02 UTC; 2s ago
Process: 25847 ExecStart=/u01/backend (code=exited, status=0/SUCCESS)
May 18 11:06:02 instance-1 systemd[1]: Starting Backend service...
May 18 11:06:02 instance-1 systemd[1]: Started Backend service.
結果、私は(端末から)手動でWebアプリケーションを実行します。
$ /u01/backend
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] POST /upload --> main.uploadFileHandler (3 handlers)
[GIN-debug] Environment variable PORT="9005"
[GIN-debug] Listening and serving HTTP on :9005
更新:
- 私はsupervisordを試してみて、それがうまく(同じバイナリファイルを動作します)
systemd
、サービスの設定をRestart=always
、RestartSec=15
に変更しました。systemd
は私のWebアプリケーションを再開し続けます。
supervisord
はうまく動作しますが、systemd
はなぜですか。私はsystemd
がそのような基本的な仕事でうまくいくと思います!
あなたのWebアプリケーションはブロックされていません。あなたのbinarieは動作しますか? – CESCO
Webアプリケーションを手動で起動するとブロックされています。 SSHを閉じると、いつでも停止します。だから私はsystemdを使ってバックグラウンドでアプリを動かすのです。手動で実行すると情報が更新されました。 – drakid