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