Что означает для контейнера состояние выполнения?

  1. Вы можете разделить файл popis.txtна 5000+ временных файлов с помощью команды split(GNU coreutils ):

    split -d -a4 -l5 popis.txt split
    

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

  2. Создайте свой модифицированный скрипт и сохраните его какscript.sh:

    #!/bin/bash
    
    for file; do
      while read -r line; do
        if [[ "$line" = ""* ]]; then
          artist=$line
        elif [[ "$line" = ""* ]]; then
          song=$line
        elif [[ "$line" = ""* ]]; then
          album=$line
        elif [[ "$line" = ""* ]]; then
          year=$line
        else
          # remove prefix `#FILENAME "` and the last quote `"`
          filename=$(echo "$line" | sed 's/[^"]*"//;s/"[[:space:]]*$//')
        fi
      done < "$file"
      echo "${artist}${song}${album}${year}" > "$filename"
    done
    
  3. Сделайте ваш скрипт исполняемым и запустите его на всех splitXXXXфайлах:

    chmod +x script.sh
    ./script.sh split*
    
  4. Если все прошло хорошо, для каждого входного файла должен быть создан один XML-файл, и вы можете удалить временные файлы:

    rm split*
    
1
21.11.2020, 23:41
2 ответа
create      Create but do not start a container
exec        Run a process in a running container

Exec не запускает ваш контейнер. Для этого вы можете использовать startили run.

Если, несмотря на это, он не работает, ваш контейнер, вероятно, разбился или завершил работу до того, как вы смогли выполнить команду exec. Если ваш основной процесс завершится, то же самое сделает и ваш контейнер, см. также:https://stackoverflow.com/a/28214133/2519977

В качестве минимального теста вы можете попробовать:

ctr=$(podman create alpine:3)
podman run -d -it $ctr /bin/sh
1
18.03.2021, 22:48

;tldr :Контейнер считается «работающим», если внутри него запущен процесс. Процесс выполняется только тогда, когда запущен контейнер Createdи состояние Up

.

Если вы создаете контейнер с podman create, состояние будет Created,

.
$ podman create alpine:3
d02b4e268fd4bb4a816852efd2e032069402474237e7bea6b3708b0319e9c318

$ podman container ls -a
CONTAINER ID  IMAGE                            COMMAND         CREATED             STATUS                        PORTS                   NAMES
d02b4e268fd4  docker.io/library/alpine:latest  /bin/sh         8 seconds ago       Created                                               exciting_hofstadter

Теперь вы можете начать с этого с помощью podman start, но он не будет оставаться в этом состоянии, он мгновенно выйдет,

$ podman start d02b4e268fd4
d02b4e268fd4
$ podman container ls -a
CONTAINER ID  IMAGE                            COMMAND         CREATED             STATUS                        PORTS                   NAMES
d02b4e268fd4  docker.io/library/alpine:latest  /bin/sh         21 seconds ago      Exited (0) 5 seconds ago                              exciting_hofstadter

Решение здесь состоит в том, чтобы в нем был долго работающий процесс,

# status created
$ podman create -ti alpine:3 /bin/sh

Теперь статусUp

CONTAINER ID  IMAGE                            COMMAND         CREATED             STATUS                        PORTS                   NAMES
cefa530172e3  docker.io/library/alpine:latest  /bin/sh         About a minute ago  Up 25 seconds ago                                     musing_cohen

И теперь ты можешь execв нём,

$ podman exec cefa530172e3 /bin/echo "Hello World"
Hello World
1
18.03.2021, 22:48

Теги

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