2017-07-18 7 views
0

私はsshのrootアクセス権を持つ実動サーバーを持っています。私はインストールしてプロジェクトをクローンしました。私はアプリケーションを実行するためにパテを使って作業していますが、パテを閉じた後に私のアプリケーションは動作しなくなります。アプリケーションを本番環境で実行する

systemctl enable myservice 

あなたはその後、起動することができます。この1時間の

[Unit] 
Description=my amazing service 

[Service] 
Restart=always 
RestartSec=3 
ExecStart=/usr/bin/path/to/my/service some args 

[Install] 
WantedBy=multi-user.target 

実行します。ここでは

は、Ubuntuの最近のバージョンでは、との /etc/systemd/system/myservice.serviceを作成するために、私のgo.serviceファイル

[Unit] 
Description=my amazing service 

[Service] 
Restart=always 
RestartSec=3 
ExecStart=go run /root/work/src/main/main.go 

[Install] 
WantedBy=multi-user.target 
+0

実行中のOSは何ですか? – kichik

+0

私はubuntuを使用しています。16.04 –

答えて

3

多くの細部を把握するには、おそらくコマンドラインでプログラムを起動して接続を終了しているはずです。 Unixの通常のセッション終了は、ログインシェルが終了すると実行中のプロセスにすべてHUPシグナルが送られます(「ハングアップ」の略)、接続が切断されてマシンに接続されている電話回線吊るされていた)。

しばらくお待ちください。手動で再起動する必要がない場合は、nohupコマンドを使用して、ログインセッションが終了してプログラムが終了しないようにすることができます。

nohup go run your-program & 

これは、バックグラウンドでプログラムを実行し、HUP信号を受信して​​からブロックします。 SSHセッションを切断できるようになり、プログラムは引き続き実行されます。

このプログラムは常時稼動の継続的なサービスを意図しており、 "生産"と言いますので、私はそれを使用すると仮定します - kichikのソリューション。 nohupではありません。は本番サーバーを実行するための妥当な方法です。 @ kichikのやり方を使って。この答えはあなたの現在の方法がなぜ機能していないのか理解しているだけです。

+0

それはまさに私が答えていたものです。 –

4

ですあなたのサービスを停止する:

sudo systemctl start myservice 
sudo systemctl stop myservice 

また、サーバーが起動すると自動的に起動し、クラッシュすると再起動します。

ここ

より:

https://wiki.ubuntu.com/SystemdForUpstartUsers#Example_Systemd_service

は、他の多くのサービス管理ソリューションがありますが、systemdにUbuntuの16に付属しているので、それはおそらく使用するのが最も簡単です。

+0

あなたが言ったようにサービスを作成しましたが、起動しようとすると次のエラーが表示されますgo.service:Unit goを開始できませんでした。サービスが正しくロードされていません:引数が無効です。 –

+0

'/ var/log/*'にエラーがないかチェックして、 'sudo systemctl enable go'を実行したことを確認してください。 – kichik

+0

' sudo systemctl enable go'を実行しました。ログには何もありません –

-1

kichikさんのように、あなたはsystemdスクリプトを書くことができます。代わりにsupervisorを使用することもできます。サーバーの起動時に自動的にアプリケーションを起動し、クラッシュ時にアプリケーションの自動再起動をサポートします。

Docker imageを作成し、アプリケーションをDockerコンテナに展開することもできます。

+0

Dockerは、サービスを稼働させるためにちょっとした冗談です。 – Adrian

+0

スーパーバイザーと同じです。 _すべてのLinuxディストリビューションには、 "古い" [SYS V init](http://savannah.nongnu.org/projects/sysvinit)、[systemd](https://www.freedesktop.org/)などのinitシステムが付属しています。 wiki/Software/systemd /)または[openrc](https://wiki.gentoo.org/wiki/Project:OpenRC)を参照してください。デーモンを導入してプロセスを稼動させ続けることは意味がありません。デーモンはinitシステムで起動する必要があります。すぐにinitシステムを使用してください。 –

関連する問題