netbatch nbqコマンドラインから複数のコマンドを1行で送信する方法

netbatch nbqコマンドラインから複数のコマンドを1行で送信する方法

nbq誰かがコマンドラインを使って1行のコマンドを送信する方法を教えてもらえますか?複数のコマンドを送信すると、Linuxでは正常に動作しますが、以下のようにnbqモードでは動作しません。

find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n'" | sort -nr | head -n 50 | tee log

これは、スキャン領域で最初の50ファイルをキャプチャするときにLinuxでのみ機能します。

nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n'" | sort -nr | head -n 50 | tee log

パイプを認識せず、最初の部分だけを実行するため失敗します。

ベストアンサー1

完全パイプラインを実行すると、nbq ... find ... | sort ...シェルは次のようにコマンドを分割します。

nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' | 
 sort -nr |
 head -n 50 |
 tee log

したがって、見える唯一のものは、nbq最初のパイプの前の部分です。シェルがこれを行うのを防ぎ、代わりにライン全体を渡す必要がありますnbq。コマンドを解析して実行する方法に関するドキュメントがないと、nbq正しい方法を知ることは困難です。

  • 元の単一行を単一の引数として使用してnbqシェルを実行するように指示できます。sh

    nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk \
      sh -c "find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' | sort -nr | head -n 50 | tee log"
    
  • あるいは、パイプ自体を管理するのに十分スマートである可能性があります(またはタスクを実行するために他のシェルを起動する可能性が高くなります)。この場合(現在)シェルから保護するために、nbq各シェルをエスケープしてください。|

    nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk \
      find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' \| sort -nr \| head -n 50 \| tee log
    
  • 他のすべての方法が失敗した場合は、「1行」アプローチを放棄し、パイプライン全体をスクリプトに配置できます。

    #!/bin/sh
    find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' |
      sort -nr |
      head -n 50 |
      tee log
    

    次にnbqスクリプトを実行します。

    nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk \
      /path/to/top50.sh
    

おすすめ記事