Mam usystematyzowaną usługę, która musi utworzyć katalog /run, ale w przeciwnym razie działa jako użytkownik inny niż root. Z przykładu bloga wyprowadziłem następujące rozwiązanie:
[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
Magia tkwi w 3 liniach następujących po komentarzu. Najwyraźniej ExecStartPrebędą działać w ten sposób jako root, ale ExecStartbędą działać jako określony użytkownik.
Doprowadziło to do 3 pytań:
- Co robi
-przed/bin/mkdir? Nie wiem, dlaczego tam jest ani co robi. - Jeśli
ExecStartPrew pliku jednostkowym jest wiele znaków, to czy są one uruchamiane szeregowo w kolejności, w jakiej znajdują się w pliku jednostkowym? Lub jakaś inna metoda? - Czy to rzeczywiście najlepsza technika do osiągnięcia celu, jakim jest utworzenie katalogu uruchamiania, aby użytkownik inny niż root mógł z niego korzystać?
ExecStartPredziała jako root, jestPermissionsStartOnly=truedyrektywa. OgraniczaUserdyrektywę tylko doExecStartpolecenia. Zobacz freedesktop.org/software/systemd/man/systemd.service.html