systemd-escape: имена unit из путей и строк
Преобразует произвольную строку или путь в форму, допустимую для имени unit: заменяет косые черты дефисами, а служебные символы — последовательностями вида \x2d.
Что делает
Главное применение — имена точек монтирования. Для пути /srv/data-2024 имя unit будет не srv-data-2024.mount, а srv-data\x2d2024.mount: дефис в имени каталога тоже экранируется. Вручную это почти всегда делают неверно.
Второе применение — имена экземпляров шаблонов, когда в значении есть косая черта или пробел.
Где ставится. Команда в терминале.
Значения
| Значение | Что происходит |
|---|---|
systemd-escape -p --suffix=mount /srv/data | имя mount-unit для пути. |
systemd-escape --template=backup@.service /srv/data | имя экземпляра шаблона из пути. |
systemd-escape -u имя | обратное преобразование. |
Пример
Имя unit для каталога с дефисом в названии.
$ systemd-escape -p --suffix=mount /srv/data-2024
srv-data\x2d2024.mount
$ systemd-escape --template=backup@.service /srv/data-2024
backup@srv-data\x2d2024.service
Выводом команды и нужно называть файл. Любая самодеятельность в экранировании заканчивается тем, что systemd отказывается загружать unit.
Типичные ошибки
Дефис в пути обязательно экранируется: имя, собранное вручную, чаще всего неверно.
Для mount-unit имя обязано соответствовать точке монтирования, иначе unit не загрузится.
Обратное преобразование нужно, когда читаете чужие имена: -u вернёт исходный путь.
Связанные ошибки
- Имя mount-unit не соответствует точке монтированияsystemd отказывается загружать .mount: имя файла должно быть получено из пути через systemd-escape. Как назвать unit правильно.
- Unit … not found: unit-файл не найденСообщение Unit not found при запуске службы: файла нет, не выполнен daemon-reload, опечатка в имени или не указано расширение.
Рядом стоящие параметры
Источники
- systemd-escape(1)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)