Команда для «дождитесь завершения задания и затем начните другое задание»? [дубликат]

Una solución a su problema es la siguiente:

  1. Conecte una unidad USB o conecte un almacenamiento físico al sistema en pregunta.
  2. Expanda el VG en el USB.
  3. Ahora tendrá suficiente espacio para luksCerrar
  4. Cierra tu instantánea Elimínala
  5. Utilice vgreduce para eliminar el dispositivo temporal de su grupo de volúmenes.
4
26.04.2019, 06:12
3 ответа

В общем, нет лучшего решения, чем то, что дано в Базовое управление заданиями :остановить задание, добавить задание в стек и `fg `, но, как вы указываете, это не удается при использовании с &&(, потому что команда, размещенная в фоновом режиме, «выходит» с не -нулевым кодом состояния ), и в любом случае не всегда будет иметь желаемый эффект с составными командами (текущий -работающая команда помещается в фоновый режим, а следующие команды выполняются немедленно ).

Для этого конкретного случая использования -есть решение — вы можете использоватьlockf.pyДиомидиса Спинеллиса для создания очереди команд, ожидающих завершения текущей aptкоманды:

lockf /var/lib/apt/lock apt install tree

Это можно обобщить на любую команду, завершение которой можно предсказуемым образом наблюдать извне.

Очередь неупорядочена и может вызвать проблемы — если вы запустите

sudo apt update && sudo apt upgrade

и поставить установку в очередь во время работы apt update, вы можете закончить тем, что apt installзапускается после apt update, а apt upgradeзавершается ошибкой, потому что не может получить блокировку.

1
27.01.2020, 20:57

Использование утилиты flock(1)из Linux (или скрипта lockf.pyиз другого ответа , аналогичного в этом отношении ), не гарантирует, что «поставленные в очередь» команды будут выполняться в том порядке, в котором они были отправлены.

$ sh -c 'for i in 1 2 3 4 5 6 7 8 9; do sleep.1; flock / sh -c "echo $i; sleep.3" & done; wait'
1
2
3
5
4
...

Глупое «решение» для создания очереди заданий может быть чем-то вроде:

$ (echo > jobq; tail -f jobq | sh) &
[2] 6641
$ echo echo 1 >> jobq
1
$ echo echo 2 >> jobq
$ 2
etc
1
27.01.2020, 20:57

Если у вас вошло в привычку всегда выполнять обновление/апгрейд в фигурных скобках,

( sudo apt update && sudo apt upgrade )

, затем управление заданиями правильно приостанавливает подпроцесс -, позволяя вам ввести

fg ; echo "Example new command"
0
27.01.2020, 20:57

Теги

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