Что такое systemd-эквивалент $ UPSTART_JOB?

В awk вы можете использовать что-то вроде для (i = 1; i <= NF; i ++) {...} чтобы перебрать все поля в строке. При этом что-то вроде:

awk '{for(i = 1 ; i <= NF ; i++) { 
         if ($i ~ /^[0-9]+$/ && $i <= 10) { next };
       } 
     } 1'  < input

$ i ~ / ^ [0-9] + $ / проверяет, состоит ли поле только из цифр, а затем сравнивает его с 10 , перемещаясь в следующая запись (строка), если она меньше или равна 10.

2
15.05.2017, 16:15
2 ответа

%p (экранированный) или %P (неэкранированный) эквивалентен $UPSTART_JOB. Из Understanding Systemd Units and Unit Files:


Ниже приведены некоторые из наиболее распространенных спецификаторов, которые будут заменены при интерпретации единицы экземпляра соответствующей информацией:

  • %n: Anywhere там, где это появляется в файле шаблона, будет вставлено полное имя результирующего модуля.
  • %N: то же самое, что и выше, но любое экранирование, например присутствующее в шаблонах пути к файлу, будет отменено.
  • %p: ссылка на префикс имени устройства. Это часть имени устройства, которая стоит перед символом @.
  • %P: то же самое, что и выше, но с обратным экранированием.
  • %i: это ссылка на имя экземпляра, которое является идентификатором, следующим за @ в единице экземпляра. Это один из наиболее часто используемых спецификаторов, поскольку он гарантированно будет динамическим. Использование этого идентификатора поощряет использование важных для конфигурации идентификаторов. Например, порт, на котором будет запущена служба, может использоваться в качестве идентификатора экземпляра, а шаблон может использовать этот спецификатор для настройки спецификации порта.
  • %I: этот спецификатор такой же, как и выше, но с обратным экранированием.
  • %f: будет заменено неэкранированным именем экземпляра или именем префикса, к которому добавлены /.
  • %c: это будет указывать на контрольную группу объекта с удаленной стандартной родительской иерархией /sys/fs/cgroup/systemd/.
  • %u: имя пользователя, сконфигурированного для запуска устройства.
  • %U: То же, что и выше, но в виде числового UID вместо имени.
  • %H: имя хоста системы, на которой работает устройство.
  • %%: используется для вставки буквального знака процента.

Используя приведенные выше идентификаторы в файле шаблона, systemd будет заполнять правильные значения при интерпретации шаблона для создания единицы экземпляра.


Спасибо муру за ссылку на «шаблон», которая улучшила мои результаты поиска.

2
27.01.2020, 21:58

В Systemd есть шаблоны, которые позволяют одному юнит-файлу принимать аргумент и запускать разные экземпляры. Классический пример: getty:

~ systemctl cat getty@.service | grep Exec
ExecStart=-/sbin/agetty --noclear %I $TERM

Если вы выполните systemctl start getty@tty7, %I заменится на tty7 до того, как systemd запустит службу.

Было бы проще использовать это в вашем файле myservice.service. Не забудьте назвать его myservice@.service и использовать %I или %i в командной строке ExecStart соответственно.

Связано:

3
27.01.2020, 21:58

Теги

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