Есть ли способ отладить GNU Parallel?

#gnu #gnu-parallel

#gnu #gnu-parallel

Вопрос:

У меня есть пример скрипта, который я пытаюсь запустить:

 #!/bin/zsh

echo "i,rt,fifo,depth,rate,burst" > sweep_srcq.csv

parallel --bar --gnu -j4 --header : 
    '
    sem --id 0 echo {i},{rt},{fifo},{depth},{rate},{burst} >> sweep_srcq.csv | cat'
    ::: i 5 
    ::: rt 0 1 
    ::: fifo 1 
    ::: rate 5 6 8 A D 14 21 32 64 
    ::: depth 128 
    ::: burst 1 
  

Когда я запускаю этот скрипт на одной из своих машин, он выполняется отлично, и я вижу файл результата:

 i,rt,fifo,depth,rate,burst
5,0,1,128,8,1
5,0,1,128,5,1
5,0,1,128,A,1
5,0,1,128,6,1
5,0,1,128,D,1
5,0,1,128,14,1
5,0,1,128,21,1
5,0,1,128,32,1
5,0,1,128,64,1
5,1,1,128,5,1
5,1,1,128,6,1
5,1,1,128,8,1
5,1,1,128,A,1
5,1,1,128,D,1
5,1,1,128,14,1
5,1,1,128,21,1
5,1,1,128,32,1
5,1,1,128,64,1
  

Но на одной из моих других машин этот код просто не выполняется..

Мой таймер остается на 0s , и он в основном просто остается там, пока я его не отключу. Есть ли способ, которым я могу отладить, что может быть не так на моей машине?

введите описание изображения здесь

Ответ №1:

Если это ваш готовый скрипт, вы могли бы сделать это, что короче и быстрее:

 echo "i,rt,fifo,depth,rate,burst" > sweep_srcq.csv

parallel --bar -j4 --header : echo {i},{rt},{fifo},{depth},{rate},{burst} 
  ::: i 5 
  ::: rt 0 1 
  ::: fifo 1 
  ::: rate 5 6 8 A D 14 21 32 64 
  ::: depth 128 
  ::: burst 1 
  >> sweep_srcq.csv
  

Но у меня такое чувство, что это не ваш полный сценарий, и есть причина, по которой вы вызываете sem из parallel .

Первое, что меня поражает, это то, что вы дважды перенаправляете стандартный вывод:

 sem [...] >> sweep_srcq.csv | cat
  

Вы хотите, чтобы стандартный вывод был добавлен в файл .csv? Или вы хотите, чтобы это было отправлено на cat ? Если вам нужны оба варианта, вам следует вместо этого использовать tee -a .

Ваша проблема может заключаться просто в том, что серверы по-разному интерпретируют эту строку и что остановленный сервер запускает cat , который считывает данные с вашей клавиатуры.