ユーザーがログインする前にサービスを開始する

ユーザーがログインする前にサービスを開始する

私はWin 7 x64ホストのVirtualBox VMでdebian 4.8.4-1 x64バニラを実行しています。インストールの目的は、ポート4040でWebインターフェースを提供する亜音速音楽ストリーミングサービスのサーバーとして機能することです。サービスは、ログインでき、ホームディレクトリを持つ標準ユーザーである「subsonic」ユーザーとして実行されます(これが重要かどうかはわかりません)。

Windowsホストで仮想マシンを起動すると、マシンが起動し、ログインプロンプトが表示されます。この時点で、他のコンピュータからポート80のApache Webサーバーにアクセスできますが、ポート4040のサブソニックサービスにはアクセスできません。サブソニックユーザーとしてログインすると、サブソニックサービスを利用できます。

明らかに、サブソニックサービスはユーザーがログインした後に開始され、Apacheはログイン前に開始されます。違いは何で、ログイン前にサブソニックサービスを開始するように設定するにはどうすればよいですか?これが正しいアプローチですか、それともユーザーに自動ログインする必要がありますか?

私は動作する方法、好ましくはLinuxの哲学と一致する方法を探しています。

ベストアンサー1

サービス名がと仮定するとsubsonic、サービスが実行されてsystemctl status subsonic.serviceエラーがない場合、サービスsubsonicはシステムサービスとして実行されています。この場合、この答えはあまり役に立ちません。

ただし、そこでエラーが発生してもsystemctl --user status subsonic.service実行後にエラーがない場合は、サービスがユーザーインスタンスで実行されていることを意味し、出力のsystemd最初の行はサービスファイルが保存される場所を示します。つまり、サービスを開始するには、ユーザーが最初にログインする必要があります。

実際のユーザーがログインしているかどうかにかかわらず、すべてのユーザーに対してサービスを実行するには、サービスファイルを次の場所に移動します/etc/systemd/systemman systemd.unitシステムパスのリストについては参考資料を参照)。また、サービスを特定のユーザーとして実行するには(で実行するのではなく)、そのセクションをファイルに追加する必要がありますroot(参考資料を参照)。User=subsonic[Service]man systemd.service

このファイルを移動した後に実行すると、systemctl status subsonic.serviceいくつかの出力が生成され(サービスは非アクティブですがロードされている可能性があります)、実行するとsystemctl --user status subsonic.serviceエラーが発生します。

おすすめ記事