К сожалению, fuser мало что делает для вас, когда вы работаете в разных непривилегированных контейнерах пространства имен, таких как lxc.
Кроме того, aptdcon не устанавливается по умолчанию (по крайней мере, 18.04) и помещает вашу задачу в очередь, поэтому вы теряете сериализацию. Это не является непреодолимым, но это означает, что ваша автоматизация должна иметь какой-то способ избежать ошибок flock в apt при установке aptdcon, и вам понадобится какой-то цикл ожидания для всего, что вам нужно сериализовать после установки пакетов через aptdcon если для этого уже нет какого-то флага.
Что работает, так это стадо. Это также должно работать через NFS и т. Д., Поскольку он использует блокировку файловой системы точно так же, как и apt, только с параметром -w секунд он будет ожидать блокировки, а не выдавать ошибку.
Поэтому, следуя модели оболочки, добавьте это как apt-get в / usr / local / bin / и поделитесь.
Это также имеет преимущество в ограничении ввода-вывода, так как не допускает параллелизма в apt, так что вы можете позволить cron запускать обновления в полночь везде, не перегружая диск.
#!/bin/bash
exec /usr/bin/flock -w 900 -F --verbose /var/cache/apt/archives/lock /usr/bin/apt-get $@
Очень хорошим и простым запросом функции для apt-get будет флаг -w для переключения на блокировку / ожидание блокировки.
sudo apt-get install packagename && sudo apt-get update
и они будут происходить автоматически после друг друга.