У мене є система 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
's буде запускатися як root таким чином, але ExecStart
запуск буде виконуватися як зазначений користувач.
Це призвело до 3 питань, хоча:
- Що
-
робити перед/bin/mkdir
? Я не знаю, чому це там чи що він робить. - Коли
ExecStartPre
в одиничному файлі є декілька, вони просто виконуються послідовно в тому порядку, який вони знаходять у файлі одиниці? Або якийсь інший метод? - Це насправді найкраща техніка для досягнення моєї мети - створити каталог запуску, щоб користувач, що не має root, міг ним користуватися?
ExecStartPre
працює як root, єPermissionsStartOnly=true
директива. Він обмежуєUser
директиву лишеExecStart
командою. Дивіться freedesktop.org/software/systemd/man/systemd.service.html