如何在 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

这仅适用于在 Linux 中捕获检查区域中的前 50 个文件。

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 ...管道时,shell 将命令拆分如下:

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看到的是第一个管道之前的部分。您需要阻止 shell 执行此操作,而是将整行交给nbq.如果没有任何有关如何解析和运行命令的文档nbq,就很难知道正确的方法。

  • 你可以告诉nbq执行一个 shell 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可能足够聪明来管理管道本身(或者更有可能启动另一个 shell 来完成工作),在这种情况下,您只需要转义每个 shell|即可保护它免受(当前)shell 的影响。

    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
    

相关内容