特定のノードで使用可能なコアの数を見つける

特定のノードで使用可能なコアの数を見つける

次のコードを修正する必要があります。このコードは、特定のノードで使用可能なコアの数を決定するように設計されています。

ステップ1:コア数を取得します。

TC=$(grep -c process /proc/cpuinfo)

ステップ2:小数点を無視した稼働時間

LA=$(uptime | cut -d ' ' -f 13 | head -c 1)

ステップ3:実行できるプロセス数を取得$LAするには減算します。$TC

procs=$(expr $TC - $LA)

私の問題は2段階です。と入力するとuptime | cut -d ' ' -f 13 | head -c 1が表示されますa。それはどういう意味ですか?ステップ2にエラーがありますか?

簡単に入力すると、次のようなuptime結果が出るという点を追加します。

 23:17:01 up 38 days, 38 min,  8 users,  load average: 0.00, 0.00, 0.00

ベストアンサー1

の出力には、uptime可変数の空白を含む複数のフィールドが含まれます。 cutおもてなしすべてスペースはフィールド区切り文字として機能するため、これらの値の一部を変更するとcutまったく異なる数値が得られます。

たとえば、ユーザー数は空白で埋められます。 10個未満の場合は空白が2個、10個以上の場合は空白が1個です。

$ echo ' 23:17:01 up 38 days, 38 min,  8 users,  load average: 0.00, 0.00, 0.00'|cut -d ' ' -f13
average:
$ echo ' 23:17:01 up 38 days, 38 min, 10 users,  load average: 0.00, 0.00, 0.00'|cut -d ' ' -f13
0.00,

代わりに を使用すると、awk各フィールド間に可変スペースを許可し、行の先頭のスペースは無視します。

$ echo ' 23:17:01 up 38 days, 38 min,  8 users,  load average: 0.00, 0.00, 0.00' | awk '{print $11}'

ただし、たとえば、「単語」自体の数が変わると、この問題はまだ壊れる可能性があります。稼働時間自体が数日、数分以上の場合:

 14:51:24 up 4 min,  1 user,  load average: 0.17, 0.16, 0.07
 14:52:09 up 6 days, 21:58, 11 users,  load average: 0.79, 0.84, 0.82

したがって、行の他の句読点(カンマやコロン)も変更される可能性があり、目的の数字を見つけるのに役立ちません。

grep -o ...次の単語だけを抽出して、load average:その中から正しい単語を抽出できます。ただし、オペレーティングシステムにこれらのファイルがある場合は、uptime出力解析を完全に停止し、代わりにそのファイルからロード平均を抽出する方がはるかに簡単です。/proc/loadavg

$ cat /proc/loadavg
1.01 0.91 0.85 1/793 24545

小数点を無視して最初の数字だけを希望する場合は、単一を使用できますcut

$ cut -d. -f1 /proc/loadavg
1

おすすめ記事