Dazu eine Frage:
Was genau willst du? Für verschiedene User unterschiedliche Jobs, die in z.B. einem Shell-Skript aufgelistet sind und abgearbeitet werden, oder willst du bestimmte Dienste für die sich einloggenden User unter deren UID starten?
Ich habe hier z.B. mpd für jeden User in einer eigenen Instanz mit der UID des eingeloggten Users laufen.
Und damit mpd nur einmal beim ersten Einloggen gestartet und beim letzten Ausloggen (der User kann ja graphisch, am TTY und auch über ssh gleichzeitig eingeloggt sein) beendet wird, hab ich das über eine systemd-user-Instanz gelöst.
Dazu kommt in das Verzeichnis /etc/systemd/user/ das Service-file
mpd.service
Code: Alles auswählen
[Unit]
Description=Music Player Daemon
Documentation=man:mpd(1) man:mpd.conf(5)
Documentation=file:///usr/share/doc/mpd/user-manual.html
After=network.target sound.target
ConditionPathExists=%h/.config/mpd/mpd.conf
[Service]
ExecStart=/usr/bin/mpd --no-daemon
# allow MPD to use real-time priority 50
LimitRTPRIO=50
LimitRTTIME=infinity
# disallow writing to /usr, /bin, /sbin, ...
ProtectSystem=yes
# more paranoid security settings
NoNewPrivileges=yes
ProtectKernelTunables=yes
ProtectControlGroups=yes
# AF_NETLINK is required by libsmbclient, or it will exit() .. *sigh*
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK
RestrictNamespaces=yes
# Note that "ProtectKernelModules=yes" is missing in the user unit
# because systemd 232 is unable to reduce its own capabilities
# ("Failed at step CAPABILITIES spawning /usr/bin/mpd: Operation not
# permitted")
[Install]
WantedBy=default.target
f
Und damit es für jeden User aktiviert ist, muss noch ein Symlink nach
/etc/systemd/user/default.target.wants/mpd.service -> ../mpd.service
Debian startet für jeden User der sich einloggt ein Service:
user@$UID.service
Dieses service startet für den User eine systemd --user Instanz. Diese hat ein default.target, und dieses ruft dann für jeden User mpd.service auf. Und das zum Zeitpunkt des ersten Einloggens auf der Maschine.
Wenn sich der User aus der letzten Session ausloggt, wird mpd auch mit dem beenden von user@$UID.service wieder beendet.
Ist das nicht das, was du suchst?
Ich hab über so eine Konstruktion sogar einen Guest-Account gebaut, der beim Login /etc/skelgast nach /home/gast kopiert, und dann die User-Session startet. Beim Ausloggen wird /home/gast wieder gelöscht. Beim erneuten Anmelden steht der User wieder vor einem blanken neuen Profil (das ich natürlich vordefiniert habe).
Das ist so in einem unserer Wohnhäuser seit Monaten erfolgreich für die Bewohner in Betrieb.
Du kannst es dir in meinem Github-Repo bei der guestsession ansehen
https://github.com/xundeenergie/guestsession. Vielleicht findest du da eine Anregung für die userspezifischen Jobs.
Aber vielleicht meinst du ja etwas anderes.
[EDIT]
Ich hab grad nochmal nachgeschaut... bei der guestsession hab ich "bloß" zwei Services in Abhängigkeit von user@$UID.service gehängt.
Das heißt, der User meldet sich an, user@$UID.service wird gestartet, und dies wiederum startet zwei services, die als systemd --system laufen.
Verwendest du BindsTo=user@%i.service in der [Unit]-Section, dann wird der Service mit user@$UID.service wieder beendet.
Willst du aber einen Job mit der UID des Users starten, so gilt das, was ich oben für mpd geschrieben habe.
lg scientific