netbatch nbq 명령줄에서 여러 명령을 한 줄로 제출하는 방법

netbatch nbq 명령줄에서 여러 명령을 한 줄로 제출하는 방법

nbq누군가 명령줄을 사용하여 한 줄 명령을 제출하는 방법을 말해 줄 수 있습니까? 여러 명령을 제출하면 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올바른 방법을 알기가 어렵습니다.

  • 원래 단일 행을 단일 인수로 사용하여 nbqshell 을 실행하도록 지시할 수 있습니다 .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
    
  • 다른 모든 방법이 실패하면 "한 줄" 접근 방식을 포기하고 전체 파이프라인을 스크립트에 넣을 수 있습니다.

    #!/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
    

관련 정보