J'ai un service systemd qui doit créer un répertoire dans /run
, mais sinon, je fonctionne en tant qu'utilisateur non root. À partir d'un exemple de blog, j'ai dérivé la solution suivante:
[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 magie est dans les 3 lignes qui suivent le commentaire. Apparemment, le ExecStartPre
sera exécuté en tant que root de cette façon, mais le ExecStart
sera exécuté en tant qu'utilisateur spécifié.
Cela a conduit à 3 questions cependant:
- Que fait le
-
devant le/bin/mkdir
? Je ne sais pas pourquoi il est là ou ce qu'il fait. - Lorsqu'il y en a plusieurs
ExecStartPre
dans un fichier d'unité, sont-ils simplement exécutés en série dans l'ordre où ils se trouvent dans le fichier d'unité? Ou une autre méthode? - Est-ce réellement la meilleure technique pour atteindre mon objectif de créer le répertoire d'exécution afin que l'utilisateur non root puisse l'utiliser?
ExecStartPre
exécutions en tant que root est laPermissionsStartOnly=true
directive. Il limite laUser
directive uniquement à laExecStart
commande. Voir freedesktop.org/software/systemd/man/systemd.service.html