У меня есть служба systemd, в которой нужно создать каталог /run
, но в противном случае он будет работать как пользователь без полномочий root. На примере блога я получил следующее решение:
[Unit]
Description=Startup Thing
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 -u /opt/thing/doStartup
WorkingDirectory=/opt/thing
StandardOutput=journal
User=thingUser
# Make sure the /run/thing directory exists
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p /run/thing
ExecStartPre=/bin/chmod -R 777 /run/thing
[Install]
WantedBy=multi-user.target
Магия в 3-х строках, которые следуют за комментарием. Очевидно, что ExecStartPre
файлы будут работать от имени пользователя root, но ExecStart
будут работать от имени указанного пользователя.
Это привело к 3 вопросам, хотя:
- Что делает
-
перед/bin/mkdir
? Я не знаю, почему он там или что он делает. - Когда
ExecStartPre
в файле модуля есть несколько файлов, они запускаются последовательно в порядке их нахождения в файле модуля? Или какой-то другой метод? - Действительно ли это лучший метод для достижения моей цели - создать каталог run, чтобы его могли использовать пользователи без полномочий root?
ExecStartPre
работает от имени пользователя root - этоPermissionsStartOnly=true
директива. Он ограничиваетUser
директиву толькоExecStart
командой. См freedesktop.org/software/systemd/man/systemd.service.html