Использование 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.
Таким образом, вам придется избегать директивы о конфликтах.
Не совсем понятно, что вы пытаетесь сделать, но если это просто преобразовать каждый __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"
]
Если ввод правильно -сформирован в формате JSON, что не так, вы можете сделать это:
ncat... | sed -e 's/__LOG4JS__/\n/g' | jq -s -M.
__LOG4JS__
- это конец -разделителя сообщений -, поэтому sed
преобразует его в новую строку, а затем jq
to pretty -print (с -M
для подавления экранирования цветов и отображения только форматирования JSON ).
Проблема с вводом заключается в том, что:{}/\\n/
невозможно проанализировать (третью строку ).
Я не совсем уверен, что вы хотите делать с цветами, это полностью удалит именованные строки цветов из вывода (, предполагая, что зеленый, желтый, красный )и -C
раскрашиваются (обычно значение по умолчанию для вывода терминала ).
ncat... | sed... | jq -C '. - ["green","yellow","red"]'
При желании добавьте -c
для компактного вывода вместо многострочного -красивого вывода, это будет ближе к вашему образцу вывода.
(Вы можете найти некоторые части вывода невидимыми в зависимости от фона вашего терминала — цвета жестко -закодированы до jq -1.5 по крайней мере.)