web-dev-qa-db-ja.com

systemd(および/またはSysV)ユニットからの起動を中断します

現在、LinuxVMの管理に役立つデーモンを作成しています。ログインできない状態でシステムを保持できる必要がありますが、ネットワークは利用可能です。どうすればこれを行うことができますか?

1
FireFaced

変更が必要なシステムアクティビティは、ユーザーのログインを防止することだけではない可能性が高いため、これらのシステムメンテナンスアクティビティの新しいsystemdターゲットを作成します。現在のグラフィックモードを変更したり、ユーザーをログアウトしたりしないように、そのターゲットをデフォルトのターゲットに依存させます。

/ etc/nologinファイルを作成または削除して、ログインを防ぐ新しいsystemdサービスを作成します(/ etc/nologinの動作については、/ etc/pam.dのpam_nologinの使用を参照してください)。作成した/ etc/nologinファイルのみを削除するように注意してください(たとえば、コンテンツ内のマジックストリングをチェックすることによって)。そのサービスを新しいsystemdターゲットがWantedByするようにします。

これを行っても、ログイン画面を表示するgdmなどの「ユーザー」が実行されたままになります。ほとんどのVMは、コマンドラインへのユーザーログイン以外のサービスをサポートするために存在します。それらの場合は、負荷共有クラスターからマシンの登録を解除する必要があるかもしれません。 「ユーザーなし」と言うときは、何を意味するのかを明確にする必要があります。

システムアップデートの経験では、通常の操作中にダウンロードして準備し、システムの再起動の一部として適用するのが最善です。 Systemdには、これを利用できるフックがあります。使用方法については、pkconシステムを参照してください。新しいセッションが許可されていない、または許可されていない「ドレイン」状態が必要な場合があります(クラスターからのデタッチの場合のように、自動的に発生する場合があります。上記のように、新しいターゲットが必要です)。

Linux VMの管理については、Ansible、Puppetなどの大規模なコミュニティでかなりの作業が行われています。ですから、あなたがさらに別のデーモンを書いていることに少し驚いています。

2
vk5tu