CentOS 7を使用しています。プーマプロセスを開始および停止するスクリプトを作成しようとしていますが、「マスター」PIDを取得する方法がわかりません(正しい用語の場合)。次のコマンドで
[rails@server myproject_production]$ ps aux | grep puma
rails 15767 0.0 1.2 437904 13612 ? Sl 17:20 0:00 puma 3.11.4 (tcp://0.0.0.0:3000,unix:///home/rails/myproject_production/shared/sockets/puma.sock) [myproject_production]
rails 15779 0.6 7.6 1061248 80688 ? Sl 17:20 0:05 puma: cluster worker 1: 15767 [myproject_production]
rails 15781 0.6 7.7 1061248 80876 ? Sl 17:20 0:05 puma: cluster worker 2: 15767 [myproject_production]
rails 15785 0.6 7.4 1061964 78488 ? Sl 17:20 0:05 puma: cluster worker 3: 15767 [myproject_production]
rails 15880 0.7 7.4 1059612 78592 ? Sl 17:22 0:05 puma: cluster worker 0: 15767 [myproject_production]
rails 17106 0.0 0.1 112612 1064 pts/0 S+ 17:33 0:00 grep --color=auto puma
メインコントロールPIDは「15767」です。他のすべてのプーマプロセスを終了すると、そのプロセスも終了します。スクリプト変数を取得するコマンドを書くには?
答え1
使用pgrep
。ps
あなたの場合は、正しいプロセスが一致すると思いますpgrep -f '^([^ ]*/)?puma '
。しかし、あなたが望むものを得ることができるかどうかを確認するためにいくつかの実験をしてみてください。
pgrep
終了したいプロセスを見つけたら、pgrep
に置き換えますpkill
。
答え2
次のようにpsを使用してこれを実行できます。
ps -ef | grep puma | grep -v grep | grep -v cluster | awk '{print $2}' | xargs kill
説明する:
メモ:プロセス情報を提供します。
grep:提供された文字列をフィルタリングします。
grep -v: 一致する履歴を削除
awk '{印刷$2}': 行の 2 番目の項目を返します。
パラメータ:提供された入力を後続のコマンドの引数に変換します。