ps出力からTomcatパラメータを抽出する

ps出力からTomcatパラメータを抽出する

私は小さな診断ツールを作成しようとしていますが、このツールで実行したい機能の1つは次のとおりです。

ps axu | grep tomcat | grep -v grep | awk '{ print $<list of desired fields> }'  

Tomcatを起動したユーザーIDと、Tomcatの起動時に渡された次のパラメータを返したいと思います。

-javaagent:/usr/share/tomcat7/<someagent> -Dcatalina.base=/var/lib/tomcat7 
- Dcatalina.home=/usr/share/tomcat7 -Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp

このフィールドを配列に渡し、Tomcatのインストールについてユーザーに通知するために使用できます。

問題は、awkを操作するために必要なフィールドを強制的に適用するためのコマンドフォーマットを指定する方法が見つからないことです。

この時点では、出力を取得して一時ファイルに書き込んでから、正規表現を使用して必要なものを抽出しようとしています。

Bashでこれを行う方法があることを知っていますが、ここでは正常に到達できませんでした。

ベストアンサー1

出力するフィールドを制御する-oには、オプションを渡します。psすべてのフィールドの後にシンボルを追加すると、=ヘッダー行は省略されます。

主張する-e代わりに使用ax基準機能(これはアンティークではなくUNIXに適用されます)。

フィルタがgrep強力ではありません。たとえば、名前付きスクリプトでこのコマンドを実行すると、look-for-tomcatスクリプトも一致します。これはorg.apache.catalina.startup.Bootstrap、パラメータを使用してJVMプロセスを見つけるためのより信頼性の高い方法です。

ps -e -o user=,args= | awk '
    $2 ~ /java$/ &&  / org\.apache\.catalina\.startup\.Bootstrap($| ) {
        print "user name: ", $1;
        if (match($0, / -javaagent:[^ ]* /)) print substr($0, RSTART+1, RSTART+RLENGTH-2);
        # etc.
    }'

/var/run/tomcat.pidより良いアプローチは、起動時にTomcatプロセスのPIDをファイルに書き込むことです(例:)。

おすすめ記事