
Gibt es eine Möglichkeit, eine Anwendung beim Start unter einem bestimmten Benutzerkonto zu starten?
Ich möchte beispielsweise, dass es a_small_app
unter dem Benutzerkonto ausgeführt wird bob
(das sich in der Gruppe befindet bobsgroup
). Muss ich etwas hinzufügen /etc/init.d
?
Hinweis: Ich möchte nicht, dass die Anwendung gestartet wirdnachdem sich ein Benutzer angemeldet hatsondern beim Start des Computers.
Antwort1
Eine systemunabhängige Startmethode. Sie können diese in /etc/rc.local
einem /etc/init.d/...
Skript, einer Upstart-Konfigurationsdatei und wahrscheinlich auch in einer systemd-Konfiguration verwenden.
sudo -u oli /full/path/to/application
Dieser Befehl wird als Root-Benutzer ausgeführt und sudo
wechselt zum Benutzer „oli“. Ändern Sie den Benutzer und den Befehl natürlich entsprechend Ihren Anforderungen.
Ich sollte hinzufügen, dass es mindestens ein Dutzend Möglichkeiten gibt, genau dies zu tun ... Aber meiner Erfahrung nach sind sie alle im Wesentlichen identisch in ihrer Wirkung. Hier ist ein Beispiel aus der Anfangsphase, das die setuid
Strophe verwendet:
start on (filesystem and stopped udevtrigger)
stop on runlevel [06]
setuid oli
respawn
exec /full/path/to/application
Antwort2
Ich bin mir nicht sicher, wie das bei älteren Ubuntu-Versionen ist, aber neuere erlauben auch die Verwendung von @reboot
(siehe z. B.hier im Ubuntu Wiki, scrollen Sie ein wenig nach unten oder verwenden Sie Strg+F, um@Neustart).
Dies kann eine nützliche Option sein, wenn Sie möchten, dass ein Benutzer beim Booten seine eigenen Befehle ausführen kann, ohne dass er Root sein muss (oder dies von jemandem mit Zugriff auf das Root-Konto für ihn tun lassen muss) oder sich überhaupt anmelden muss. Wenn es funktioniert, funktioniert es ohne Anmeldung.
Geben Sie also als „bob“ ein crontab -e
und fügen Sie dann am Ende der geöffneten Datei eine neue Zeile hinzu, etwa:
# bottom of bob's crontab
@reboot /path/to/a_small_app
Falls es nicht funktioniert, sollten Sie Ihre Umgebungsvariablen überprüfen, insbesondere PATH
. Normalerweise setze ich HOME
und PATH
explizit über der Crontab. So etwas wie:
# top of bob's crontab
HOME=/home/bob
PATH=/home/bob/.local/bin:/usr/local/bin:/usr/bin:/bin
So finden Sie heraus, warum es möglicherweise nicht funktioniert:
# bottom of bob's crontab
* * * * * /path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log # will run every minute
... und öffnen Sie es dann /tmp/a_small_app.log
nach 60 Sekunden in Ihrem bevorzugten Editor, um zu sehen, ob es nützliche Informationen enthält.
Beim Versuch, @reboot
heute einetmuxSitzung, in der der auszuführende Befehl laufen soll, bin ich heute über ein störrisches Skript gestolpert, das mit diesem kleinen Trick funktioniert hat. Hier in Kombination mit der obigen Protokollierungssache:
@reboot tmux new-session -d -s mysession "bash -c '/path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log'"
Antwort3
Es scheint, dass die erste Antwort unter Ubuntu 14.10 nicht mehr funktioniert.
So mache ich es dort (lege es in /etc/rc.local ein)
su <username> - -c "<command>"