
私は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/system
(man systemd.unit
システムパスのリストについては参考資料を参照)。また、サービスを特定のユーザーとして実行するには(で実行するのではなく)、そのセクションをファイルに追加する必要がありますroot
(参考資料を参照)。User=subsonic
[Service]
man systemd.service
このファイルを移動した後に実行すると、systemctl status subsonic.service
いくつかの出力が生成され(サービスは非アクティブですがロードされている可能性があります)、実行するとsystemctl --user status subsonic.service
エラーが発生します。