
Redisサービスインスタンスが複数あり、コマンド出力にラベルを追加したいと思いますps
。現在私は次を見る:
$ ps aux | grep redis
root <snipped> /usr/local/bin/redis-server *:6381
root <snipped> /usr/local/bin/redis-server *:6380
次のように出力される方法はありますか?
root <snipped> /usr/local/bin/redis-server *:6381 item cache # <== label
root <snipped> /usr/local/bin/redis-server *:6380 page cache # <== label
つまり、各インスタンスの目的を簡単に識別できるようにテキストラベルを追加します。
バイナリをコピーせずにこれを行う方法はありますか?
答え1
redis-server
起動後に独自のコマンド名を変更する機能がデフォルトでサポートされていないと仮定すると(一部のプログラム、特にデーモンにはこれらのサポートがあります)、次のことができます。
代替コマンド名を使用してください。
コマンドラインの最初の引数()は通常、コマンドを呼び出すために使用されるバイナリの名前(フルパス名またはデフォルト名)ですが、必ずしも
argv[0]
そうではありません。そうでなければ、アプリケーション自体はおそらくそれを認識しないか気にしません。ただし、シェルはsetを使用してコマンドを実行するためにこの規則に従いますargv[0]
。「特別な」方法で始めましょう。/etc/init.d
これを行うには、このデーモンを起動するスクリプトを変更する必要があるかもしれません。バイナリへのハードリンクを作成して実行します。これはバイナリコピーの提案と似ていますが、コピーは必要ありません。ハードリンクを使用している場合、バイナリは追加のディスク容量を消費せず、複数のインスタンスのコード(テキスト)はすべてメモリを共有します。これはレプリカでは発生しません。