Ho un servizio systemd in cui è necessario creare una directory /run
, ma altrimenti eseguito come utente non root. Da un esempio di blog, ho derivato la seguente soluzione:
[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
La magia è nelle 3 righe che seguono il commento. Apparentemente ExecStartPre
verrà eseguito come root in questo modo, ma ExecStart
verrà eseguito come l'utente specificato.
Ciò ha portato a 3 domande:
- Cosa fa
-
di fronte al/bin/mkdir
? Non so perché sia lì o cosa faccia. - Quando sono presenti più
ExecStartPre
file in un file di unità, vengono semplicemente eseguiti in serie nell'ordine in cui si trovano nel file di unità? O qualche altro metodo? - È davvero la migliore tecnica per raggiungere il mio obiettivo di creare la directory di esecuzione in modo che l'utente non root possa utilizzarla?
ExecStartPre
viene eseguito come root è laPermissionsStartOnly=true
direttiva. Limita laUser
direttiva solo alExecStart
comando. Vedi freedesktop.org/software/systemd/man/systemd.service.html