Пользователь Docker, выполняющий процесс, не может быть удален

Расширение оболочкой

Кавычки вокруг "$ i * .csv" имеют значение. С помощью кавычек оболочка расширяет эту строку до «2014-11 / *. Csv». Точно этого файла не существует, и zip сообщает об ошибке. Без кавычек * также раскрывается (через расширение имени файла / «подстановку»), и результирующая команда zip представляет собой полный список совпадающих файлов, каждый в качестве отдельного аргумента. Вы можете получить второе поведение внутри цикла for с помощью:

for i in */ ; do zip "zips/${i%/}.zip" "$i"*.csv ; done

Расширение с помощью zip

zip также может расширять подстановочные знаки для себя, но не во всех ситуациях. Из руководства по zip :

Программа zip может выполнять такое же сопоставление имен, которые находятся в изменяемом архиве zip или, в случае параметры -x (исключить) или -i (включить) в списке файлов, с которыми нужно работать, с помощью обратной косой черты или кавычек, чтобы указать оболочке не выполнять имя расширение.

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

Чтобы заставить zip обрабатывать подстановочные знаки при создании архива, используйте параметр -r (рекурсивный) для рекурсии в запрошенный каталог и -i (включить), чтобы ограничить его файлами, соответствующими шаблону:

 for i in */ ; do zip -r "zips/${i%/}.zip" "$i" -i '*.csv' ; done
3
28.03.2017, 20:34
1 ответ

Только для тех, кто следит за моей проблемой. Это было немного странно, но пользователь, который запускал этот процесс, имел тот же идентификатор внутри контейнера докеров, что и хост, поэтому, когда я перечислял все процессы, идентификатор пользователя внутри контейнера получал сопоставлен с конкретным пользователем, который у меня был на хосте. Это объясняет, почему, когда я удалил пользователя на хосте, я все еще видел, что процесс выполняется как "1001".

Итак, теперь я понимаю, что это должно работать именно так.

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

0
27.01.2020, 21:36

Теги

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