Как вставить вывод команды в определенную строку?

1.)multi-user.targetв основном является ближайшим эквивалентом классического уровня запуска SysVinit 3, который есть у systemd. Когда система systemdзагружается, systemdпытается привести состояние системы в соответствие с состоянием, заданным параметром default.target-, который обычно является псевдонимом для graphical.targetили multi-user.target.

multi-user.targetобычно определяет состояние системы, при котором все сетевые службы запущены и система принимает входы в систему, но локальный графический интерфейс не запущен. Это типичное состояние системы по умолчанию для серверных систем, которые могут быть безголовыми системами, установленными в стойку -в удаленной серверной комнате.

graphical.target— еще один возможный псевдоним для default.target. Обычно он определяется как надмножествоmulti-user.target:и включает в себя все, что делает multi-user.target, плюс активация локального входа в систему с графическим интерфейсом.Это похоже на уровень выполнения 5 в классическом SysVinit.

Строка WantedBy=multi-user.targetв службе по существу аналогична указанию «эта служба должна запускаться на уровнях запуска 3, 4 и 5» в системах SysVinit :она говорит systemd, что эта служба должна быть запущена как часть нормальный запуск системы -, независимо от того, активен локальный графический интерфейс или нет.

Тем не менее, WantedByотделен от включенного/отключенного состояния :, так что в другом смысле это своего рода «предустановка» :, она определяет, при каких условиях может произойти автоматический запуск, но только когда сервис включается в первую очередь.

2. )Если вы пропустите строку WantedBy=multi-user.targetи никакая другая включенная служба не включает Requires=your.serviceили Wants=your.serviceв определение службы, ваша служба не будет запущена автоматически.

systemdработает на зависимостях, и во время загрузки, если ничего Requiresили Wantsне ваша служба, она не будет запущена, даже если служба включена.

Конечно, вы можете отредактировать свой default.target, чтобы добавить или удалить строки Requiresили Wantsдля любых служб, которые вы хотите запускать во время загрузки -, но так, чтобы вы могли просто добавить новый файл службы в систему. и заставить его работать по умолчанию (, что упрощает работу менеджеров пакетов программного обеспечения ), systemdимеет ключевые слова WantedByи RequiredBy, которые можно использовать для вставки зависимостей типа WantsиRequires-(соответственно )с "другого конца".

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

Например, вы можете проводить рефакторинг серверного приложения A и по той или иной причине решить выделить некоторые дополнительные функции из него в отдельную службу B, чтобы предоставить пользователю возможность не устанавливать ее, если она не нужна. Затем вы можете сделать службу B отдельной service-B.rpm,и определите B.serviceс WantedBy=A.service, чтобы заставить systemdзапускать службу B автоматически всякий раз, когда запускается служба A -, но только тогда, когда service-B.rpmдействительно установлена.

Обратите внимание, что Wantsили WantedByговорят только о том, что система должна запускать одну службу всякий раз, когда запускается другая служба или цель, но ничего не говорят о порядке запуска/остановки. Если вам нужно, чтобы служба B уже работала при запуске службы A, вам нужно добавить Before=A.serviceв файл B.service, чтобы явно указать зависимость запуска -up order.

4. )В любое время, когда вы делаете хотите, чтобы служба имела возможность запускаться автоматически во время загрузки, и нет других уже определенных зависимостей.

-1
21.06.2020, 18:56
2 ответа

По крайней мере, с GNU sed вы можете использовать команду rсо специальным именем файла /dev/stdinдля чтения и постановки в очередь содержимого стандартного ввода для вставки в конце цикла(rвроде как aдля файлов ).

Итак, если ваш generate-changelogпишет на стандартный вывод, вы можете попробовать

generate-changelog | sed -i '4r/dev/stdin' CHANGELOG.md
2
18.03.2021, 23:26

Вот так с :

awk 'NR==4{system("generate-changelog")}1' file

вам нужен временный файл с перенаправлениями ввода-вывода, чтобы это работало.

1
18.03.2021, 23:26

Теги

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