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 ExecStartPre
będą działać w ten sposób jako root, ale ExecStart
bę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
ExecStartPre
w 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ć?
ExecStartPre
działa jako root, jestPermissionsStartOnly=true
dyrektywa. OgraniczaUser
dyrektywę tylko doExecStart
polecenia. Zobacz freedesktop.org/software/systemd/man/systemd.service.html