Как правильно отформатировать этот журнал?

Использование ExecStartPre:

Из записи ExecStartPre на странице руководства:

If any of those commands (not prefixed with "-") fail, the rest are not executed and the unit is considered failed.

сервисА

[Unit]
Description=Service A 12 hours on timer

[Service]
Type=oneshot
# Check and see if serviceB is running
ExecStartPre="! systemctl is-active --quiet serviceB"
Restart=no
...

сервисБ

[Unit]
Description=Service B 15 mins on timer

[Service]
Type=oneshot
# Check and see if serviceA is running
ExecStartPre="! systemctl is-active --quiet serviceA"
Restart=no
...

Конфликты

Если вы используете директиву Conflicts, указанная служба или службы будут остановлены при запуске службы с установленной директивой. Вы упомянули:

I also want to make sure that "serviceA" doesn't kill "serviceB" if it's triggered and "serviceB" is currently running.

Однако из справочной страницы видно, что это двусторонняя связь:

If a unit has a Conflicts= setting on another unit, starting the former will stop the latter and vice versa.

Таким образом, вам придется избегать директивы о конфликтах.

0
25.03.2021, 15:56
2 ответа

Не совсем понятно, что вы пытаетесь сделать, но если это просто преобразовать каждый __LOG4JS__в новую строку, то это будет использование GNU awk для нескольких -char RS (Я исправил ваш ввод чтобы удалить этот ложный /\\n/, который присутствовал в 3-й строке, делая этот недействительный JSON и который, как я полагаю, на самом деле не присутствует в ваших реальных данных):

$ awk -v RS='__LOG4JS__|\r?\n' '1' file
[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},"2021-03-25T08:01:08.086Z","default",["6"],{"level":20000,"levelStr":"7","colour":"8"},{},"Hello, log4js! \n","INFO","green"]
[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},"2021-03-25T08:01:08.096Z","default",["6"],{"level":30000,"levelStr":"7","colour":"8"},{},"Test warning! This is not a drill! \n","WARN","yellow"]
[{"startTime":"1","categoryName":"2","data":"3","level":"4","context":"5","pid":7520},"2021-03-25T08:01:08.229Z","default",["6"],{"level":20000,"levelStr":"7","colour":"8"},{},"Connected to mongo","INFO","green"]

Вы можете сделать то же самое с любым awk, но это будет считывать весь файл в память (, как и эквивалентное решение sed):

awk '{sub(/\r$/,""); gsub(/__LOG4JS__/,ORS)}1' file

Если вы пытаетесь сделать что-то еще, уточните, что это такое, и обновите пример в своем вопросе, чтобы показать ожидаемый результат.

С помощью приведенного выше, если вы просто хотите увидеть отформатированный вывод json:

$ awk -v RS='__LOG4JS__|\r?\n' '1' file | jq.
[
  {
    "startTime": "1",
    "categoryName": "2",
    "data": "3",
    "level": "4",
    "context": "5",
    "pid": 7520
  },
  "2021-03-25T08:01:08.086Z",
  "default",
  [
    "6"
  ],
  {
    "level": 20000,
    "levelStr": "7",
    "colour": "8"
  },
  {},
  "Hello, log4js! \n",
  "INFO",
  "green"
]
[
  {
    "startTime": "1",
    "categoryName": "2",
    "data": "3",
    "level": "4",
    "context": "5",
    "pid": 7520
  },
  "2021-03-25T08:01:08.096Z",
  "default",
  [
    "6"
  ],
  {
    "level": 30000,
    "levelStr": "7",
    "colour": "8"
  },
  {},
  "Test warning! This is not a drill! \n",
  "WARN",
  "yellow"
]
[
  {
    "startTime": "1",
    "categoryName": "2",
    "data": "3",
    "level": "4",
    "context": "5",
    "pid": 7520
  },
  "2021-03-25T08:01:08.229Z",
  "default",
  [
    "6"
  ],
  {
    "level": 20000,
    "levelStr": "7",
    "colour": "8"
  },
  {},
  "Connected to mongo",
  "INFO",
  "green"
]
1
28.04.2021, 22:56

Если ввод правильно -сформирован в формате JSON, что не так, вы можете сделать это:

ncat... |  sed -e 's/__LOG4JS__/\n/g' | jq -s -M.

__LOG4JS__- это конец -разделителя сообщений -, поэтому sedпреобразует его в новую строку, а затем jqto pretty -print (с -Mдля подавления экранирования цветов и отображения только форматирования JSON ).

Проблема с вводом заключается в том, что:{}/\\n/невозможно проанализировать (третью строку ).

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

ncat... | sed... | jq -C '. - ["green","yellow","red"]'

При желании добавьте -cдля компактного вывода вместо многострочного -красивого вывода, это будет ближе к вашему образцу вывода.

(Вы можете найти некоторые части вывода невидимыми в зависимости от фона вашего терминала — цвета жестко -закодированы до jq -1.5 по крайней мере.)

1
28.04.2021, 22:56

Теги

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