Como enviar vários comandos como um forro na linha de comutação netbatch nbq

0

Alguém pode dizer como enviar um comando de um forro usando a linha de comando nbq ? Vários comandos enviados no Linux funcionam bem, mas não no modo nbq como abaixo.

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

isso só funciona no Linux, capturando os 50 melhores arquivos na área de verificação.

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

falhou ao executar a primeira parte sem reconhecer o canal.

    
por user174414 10.06.2016 / 09:14

1 resposta

0

Quando você executa todo esse nbq ... find ... | sort ... , pipeline, o shell divide os comandos da seguinte forma:

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

Portanto, a única coisa que nbq vê é o bit antes do primeiro canal. Você precisa parar o shell de fazer isso e, em vez disso, dar a linha inteira para nbq . Sem qualquer documentação sobre como nbq analisa e executa o comando, é difícil saber a abordagem correta.

  • Você poderia dizer a nbq para executar um shell sh , com seu one-liner original como um único argumento:

    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"
    
  • Como alternativa, nbq pode ser inteligente o suficiente para gerenciar o pipeline em si (ou, mais provavelmente, iniciar outro shell para fazer o trabalho), caso em que você só precisa escapar de cada | para protegê-lo do ( atual).

    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
    
  • Se tudo mais falhar, você pode abandonar a abordagem "one-liner" e colocar todo o pipeline em um script:

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

    diga nbq para executar esse script:

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

Tags