Systemd остановил демон Docker без видимой причины

#!/usr/bin/perl

use strict;

my $master = shift;
open(M,"<","$master") || die "couldn't open $master:$!\n";
chomp(my @master = split(/\|/,<M>));
close(M);

print join("|",@master),"\n";

my @fields=();
while (<>) {
  if ($. == 1) {
    chomp(@fields = split /\|/);
    next;
  };

  chomp(my @row = split/\|/);
  my @out = ();

  foreach my $m (@master) {
    my $o='';
    for (my $i=0; $i < $#row; $i++) {
      if ($fields[$i] eq $m) {
        $o = $row[$i];
      };
    }
    push @out, $o;
  };

  print join("|",@out),"\n";
} continue {
    close ARGV if eof; # reset the line counter after each input file
}

Это считывает основной файл ссылки (, который должен быть первым аргументом в командной строке ), и разбивает его на массив (@master ), содержащий имена полей..

После этого он считывает все оставшиеся аргументы имени файла и:

  • если это первая строка файла, получить заголовки полей, разбив строку на массив@fields
  • в противном случае разделите строку на массив @rowи выполните цикл по @master и каждому элементу @row. Когда поле имя элемента строки соответствует элементу в @master, добавьте значение этого поля в выходной массив (@out ), в противном случае добавьте пустую строку.
  • напечатать массив @out, соединенный |символами.
  • Массив @outсбрасывается в пустое значение для каждой строки ввода.

Сохраните его как, например, rearrange.pl, сделайте его исполняемым с помощью chmod +x rearrange.plи запустите как:

$./rearrange.pl master.txt input1.txt input2.txt 
State|City|Vehicle|Gender|Name|Amount
|Altamonte|Volkswagen||Jack|123.22
||Audi||Sam|23.1
|NewYork|Ford|||21.4
NJ|Hoboken|Volkswagen||Jack|
|Stamford|Buick||Rob|

Примечание. :это не ограничивается только двумя входными файлами. Он может обрабатывать любое количество входных файлов одновременно. Есть только два ограничения:

  1. Основной справочный файл (, например.master.txt)ДОЛЖЕН быть первым аргументом в командной строке.

  2. Должен быть хотя бы один входной файл или входной файл должен быть передан в сценарий.

    Примечание :только один входной файл может быть передан по конвейеру-сценарий не может узнать, какие строки являются строками заголовков, а какие строками данных, если передается более одного файла.

4
01.12.2020, 16:20
1 ответ

В этом конкретном случае то, что говорит systemd остановить службу docker, по-видимому, является автоматической -службой обновлений Ubuntu, применяющей обновления версии пакета containerd для Ubuntu. Существует открытая проблема, показывающая, что сегодня многие другие сталкиваются с той же проблемой :

.

https://bugs.launchpad.net/ubuntu/+source/containerd/+bug/1870514

В этом связанном выпуске журнал включает:

Apr 03 06:09:31 server systemd[1]: Starting Daily apt upgrade and clean activities...
...
Apr 03 06:09:43 server systemd[1]: Stopping Docker Application Container Engine...

Я бы рекомендовал установить Docker из вышестоящих репозиториев Docker, в которых, похоже, нет этой проблемы:

https://docs.docker.com/engine/install/ubuntu/

4
18.03.2021, 22:46

Теги

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