Redisサービスを停止する上で注意すべきこと


これは今日Redis 3をテストしています.0.0クラスタのときに偶然遭遇した場合.Redisサービスを停止するときは、それぞれpkill redis-serverとkill-9 redis-pidでRedisサービスを停止しましたが、Redisのログ出力は違います.
pkillを使用してRedisを停止した場合、入力したログは以下のようになります.Redisが正常に終了したことを示します.
16017:signal-handler (1423639887) Received SIGTERM scheduling shutdown...
16017:M 10 Feb 23:31:27.163 # User requested shutdown...
16017:M 10 Feb 23:31:27.164 * Calling fsync() on the AOF file.
16017:M 10 Feb 23:31:27.164 * Saving the final RDB snapshot before exiting.
16017:M 10 Feb 23:31:27.213 * DB saved on disk
16017:M 10 Feb 23:31:27.213 # Redis is now ready to exit, bye bye...

一方、kill-9を使用してRedisを停止する場合、Redisはログ出力がなく、killコマンドでRedisサービスを停止することは正しくありません.
上のログからも分かるように、Redisが正常に終了するには、RedisにSIGTERM信号を送信する必要があります.pkillはパラメータを含むすべてのプロセスkillを削除し、単一のプロセスをkillし、SIGTERMコマンドを発行してもいいですか?答えはkill-15 redis-pidでいいです.
ここでまとめると、Redisサービスを正常に停止する場合は、pkillコマンドですべてのRedisサービスを停止するか、kill-15 redis-pidを使用して1つのRedisサービスを停止することができます.
ついでにpkillとkillについてお話しします.
pkill:名前とその他の属性でプロセスを検索または送信します.
kill:kill-lコマンドでは、killに64個のパラメータが表示されます.一般的な5個は次のとおりです.
  • 1)SIGHUP:本信号は、ユーザ端末の接続(正常または非正常)が終了したときに発行され、通常、端末の制御プロセスが終了したときに、同じセッション内の各ジョブに通知され、このときそれらは制御端末と関連付けられなくなる.
  • 2)SIGINT:プログラム終了(interrupt)信号は、ユーザがINTR文字(通常Ctrl-C)を入力したときに発行され、フロントプロセスグループにプロセス終了を通知するために使用される.
  • 3)SIGQUIT:SIGINTと似ているが、QUIT文字(通常はCtrl-)によって制御.プロセスはSIGQUITの終了を受信するとcoreファイルを生成します.この意味ではプログラムエラー信号に似ています.
  • 9)SIGKILL:プログラムの実行を直ちに終了する.この信号はブロック、処理、無視できません.管理者がプロセスが終了しないことに気づいた場合は、この信号を送信してみます.
  • 15)SIGTERM:プログラム終了(terminate)信号であり、SIGKILLとは異なり、この信号をブロックして処理することができる.通常、プログラム自体が正常に終了するように要求するために使用され、shellコマンドkillはデフォルトでこの信号を生成します.プロセスが終了しない場合は、SIGKILLを試します.

  • 参照先:
    1、linux kill信号リスト
    2、SIGTERM vs. SIGKILL
    3、kill
    4、kill、killall、pkillの違い