Запускать следующее задание с помощью GNU Parallel, только если заданное пользователем условие истинно

Я запускаю несколько экземпляров программы, использующей GNU Parallel, и каждый из них требует некоторого места во вторичной памяти. Бывает, что позже в моей текущей настройке все экземпляры завершаются с ошибкой, потому что на устройстве не осталось места.

Как я могу настроить GNU Parallel для запуска следующего задания только тогда, когда использование устройства ниже 90%? Я могу получить сведения об использовании устройства с помощью команды df: df --output=pcent "$PWD" | sed '1d;s/[^0-9]//g'


person user3762200    schedule 03.08.2017    source источник


Ответы (1)


Вы можете использовать такую ​​функцию:

#!/bin/bash

# define a function which "parallel" will call
doit() {
   # wait forever for sufficient resources
   while :; do
      pcnt=$(df --output ...)
      [ $pcnt -lt 90 ] && break
      sleep 5
   done
   # do job now as resources are available

}

# export function to subshells started by "parallel"
export -f doit

# start "parallel" - probably one of 3 methods:
#   parallel -a jobs.txt doit
#   parallel doit ::: jobs
#   generate_jobs | parallel doit
person Mark Setchell    schedule 03.08.2017