service restart [someservice]
とservice reload [someservice]
の違いを理解しようとしています。 「再起動」はサービスを再起動し、「再読み込み」は設定を再読み込みすることを理解していますが、特定のコンテキストでどちらを使用するかを決定するのに十分な実用的な意味を十分理解していません。
例:PostgreSQLをセットアップするために読んだほとんどのガイドは、postgresql.confとpg_hba.confを編集してリモート接続を許可したら、Sudo service postgresql restart
を発行する必要があると言っています。ただし、上記の説明に基づいてどちらを使用するかを推測している場合は、「リロード」を選択します。
それが重要な場合、Ubuntu 11.10を使用していますが、できるだけ一般的に適用可能な説明を期待しています。
あなたが言ったことは正しいです、reload
はサービスに設定ファイルをリロードするように伝えます。つまり、構成を再ロードするのに十分なはずです。ただし、「ルールに従わない」サービスや、設定ファイルをリロードしないサービスが存在する場合があります。このため、おそらくrestart
を使用する方が安全です。私は個人的にpostgresql
を使用していないので、わかりません。
すべてのサービスがreload
をサポートしているわけではありません。そのような場合は、通常、再起動することをお勧めします(つまり、リロードするとダウンタイムが少なくなるか、まったくなくなります)。
Debianポリシーマニュアルで指定 すべての/etc/init.d/
スクリプトはforce-reload
アクションをサポートする必要があります。つまり、サービスがサポートしている場合はreload
を意味し、restart
を意味しますサービスはリロードをサポートしていません。
それがどのように現代のUbuntuの新興企業の世界に変換されるのか分かりません。
展開するには عبدالنورالتومي systemdでの私の経験で答えてください。
Systemdでは、プロセスが開始されるたびにsystemdコンテキスト内で実行されます。これの最も明確な例は、ユニットファイルで定義された環境変数を使用する場合です。
そのため、systemctl reload [someservice]
シグナルを送信すると、サポートされている場合は、サービスに適切にリロードするためのシグナルを送信します。そうでない場合、プロセスは単にシグナルを無視します。ただし、これは構成可能です。
私は優雅にとはどういう意味ですか?新しい構成またはコードを使用して新しいワーカーを開始し、古いワーカーが現在の要求の処理を終了したら停止します。
また、systemctl restart [someservice]
を作成すると、systemctlにサービスに停止するよう指示し、現在のsystemdコンテキストを破棄し、新しいコンテキストを作成して、サービスを再度実行します。これは、たとえばsystemdコンテキストで環境変数をリロードする場合、またはリロードがサポートされていない場合に意味があります。
これが少し明確になり、私が何か間違っている場合はお知らせください。
postgresはリロードと再起動の大きな違いの良い例です。後者はすべてのデータベースクライアントを切断する必要があるためです。
接続をロールバックしない場合、最初にpg_ctlclusterを使用して、「-force」なしでサービスを停止できます。
/ etc/postgres/{version}/{dbname} /postgresql.confおよび http://www.postgresql.org/docs/manuals / すべてのパラメーターには、「このパラメーターはサーバーの起動時にのみ設定できます」などの注意事項があります。
現在、サービスをキックする必要がある場合(たとえば、構成ファイルを変更した場合)、サービスに通知できますが、これにより再起動が発生します。サービスが既に実行されている場合にリロードが行われた場合は素晴らしいでしょう(ただし、一部のファイルの再起動、他のファイルのリロードが必要なサービスがあるはずです)。
私が考えることができる最も複雑な例は、Apacheのようなものです。通常はリロードするように要求できますが、場合によっては代わりに再起動を要求する必要があります(たとえば、モジュールを追加/削除する場合)。