web-dev-qa-db-ja.com

Ubuntuでサーバーアプリケーションを実行する最良の方法は何ですか?

これは、Linuxサーバーを実行する最初の試みです。 sshにアクセスできるサーバーで実行したいサーバーアプリケーションがあります。

これがWindowsサーバーの場合、リモートデスクトップを開いて実行し、リモートデスクトップセッションを切断します。ただし、sshセッションからログアウトすると、内部で生成されたすべてのプロセスが強制終了されることを理解しています。

そのため、少し検索を行いましたが、切断後にプロセスを実行し続けるには、screenまたはtmuxを使用する必要があるようです。しかし、もっと良い方法があるかどうか知りたいです。サーバープロセスは標準入力から制御コマンドを読み取ることができるはずです。私はむしろ標準出力のログ出力も表示できるようにします(ただし、残りの部分は必然的にログファイルに記録されます)。


更新:現在、tmuxセッション内でアプリを実行しています。それはうまく機能しているようですが、これが最良の方法だとは思いません...

3
Arshia001

Linuxでサーバーを実行するには、systemdによって実行されるものにサーバーを追加します。サービスは、/etc/systemd/system/{target}/に置かれる短いserviceファイルで記述されます。ここで、{target}はシステム状態(通常、multi-user.target.wants)を示します。サービスの説明には、実行する実行可能ファイルや、終了した場合の処理​​などが含まれます。たとえば、mysqlサーバー:

# MySQL systemd service file

[Unit]
Description=MySQL Community Server
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
PermissionsStartOnly=true
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
ExecStart=/usr/sbin/mysqld
ExecStartPost=/usr/share/mysql/mysql-systemd-start post
TimeoutSec=600
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755

ファイルを設定したら、systemctlコマンドを使用します。

  • systemctl start {service}はサーバーを起動します
  • systemctl stop {service}はサーバーを停止します
  • systemctl enable {service}は、起動後にサーバーを起動します
  • systemctl disable {service}は、再起動後にサーバーが起動しないようにします
1
xenoid