Параллельный запуск команд и ожидание запуска одной группы команд перед запуском следующей

Файл /var/spool/mail/rootобычно содержит локально доставляемую электронную почту для пользователя root. Например,

echo hello, world | mail -s 'kandr test' root

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

Не пытайтесь воссоздать файл. Он будет воссоздан автоматически в следующий раз, когда учетная запись пользователя root получит сообщение. (Вы можете прочитать такие сообщения с помощью команды mailили mailx.)

0
28.04.2021, 11:40
2 ответа

Запустите команды для каждой группы в подоболочке. например.

for i in 1 2; do
  ( command1
    command2
    command3
   ...
  ) &
done

Если вам нужна явная задержка между каждой группой фоновых команд, используйте sleep. например. с задержкой в ​​одну секунду:

for i in 1 2; do
  ( command1
    command2
    command3
   ...
  ) &
  sleep 1
done
0
28.04.2021, 22:51
dodelay=0
for i in 1 2 ; do
  if [[ $dodelay -eq 1 ]] ; then
    sleep 10
  fi
  dodelay=1

  do-stuff-here $i
done

В качестве альтернативы используйте GNU parallel , у него есть опция задержки:

man parallel

--delay mytime

Delay starting next job by mytime. GNU parallel will pause mytime after starting each job. mytime is normally in seconds, but can be floats postfixed with s, m, h, or d which would multiply the float by 1, 60, 3600, or 86400. Thus these are equivalent: --delay 100000 and --delay 1d3.5h16.6m4s.

 parallel --delay 20 script-with-inner-for-loop.sh ::: 1 2
1
28.04.2021, 22:51

Теги

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