только последние данные хвоста, а не предыдущие

En mi caso, no puedo usar el semáforo (Estoy en git -bash en Windows ), así que se me ocurrió una forma genérica de dividir la tarea entre N trabajadores, antes de que comiencen.

Funciona bien si las tareas toman aproximadamente la misma cantidad de tiempo. La desventaja es que, si uno de los trabajadores tarda mucho en hacer su parte del trabajo, los demás que ya terminaron no ayudarán.

Dividir el trabajo entre N trabajadores (1 por núcleo)

# array of assets, assuming at least 1 item exists
listAssets=( {a..z} ) # example: a b c d.. z
# listAssets=( ~/"path with spaces/"*.txt ) # could be file paths

# replace with your task
task() { # $1 = idWorker, $2 = asset
  echo "Worker $1: Asset '$2' START!"
  # simulating a task that randomly takes 3-6 seconds
  sleep $(( ($RANDOM % 4) + 3 ))
  echo "    Worker $1: Asset '$2' OK!"
}

nVirtualCores=$(nproc --all)
nWorkers=$(( $nVirtualCores * 1 )) # I want 1 process per core

worker() { # $1 = idWorker
  echo "Worker $1 GO!"
  idAsset=0
  for asset in "${listAssets[@]}"; do
    # split assets among workers (using modulo); each worker will go through
    # the list and select the asset only if it belongs to that worker
    (( idAsset % nWorkers == $1 )) && task $1 "$asset"
    (( idAsset++ ))
  done
  echo "    Worker $1 ALL DONE!"
}

for (( idWorker=0; idWorker<nWorkers; idWorker++ )); do
  # start workers in parallel, use 1 process for each
  worker $idWorker &
done
wait # until all workers are done
1
19.06.2019, 06:47
1 ответ

Да, вы можете указать tailначинать без строк из файла, и он будет отображать только строки, добавленные после запуска:

tail -F -n 0 /var/log/syslog

По умолчанию tailпоказывает последние десять строк файла (с ), который предлагается обработать.

2
27.01.2020, 23:30

Теги

Похожие вопросы