Wie starte ich ein Hintergrundprogramm von einem Nicht-Root-Benutzer automatisch?

14

Als Benutzer ohne Rootberechtigung möchte ich beim Systemstart einen Hintergrundjob ausführen. Es ist eine Art Dienst, für den keine Root-Rechte erforderlich sind. Gibt es eine Möglichkeit, dies zu tun?

Eine Möglichkeit ist , setzt sudo -u user commandin rc.local, aber die Bearbeitung rc.localerfordert root - Privilegien.

Eine andere Möglichkeit besteht darin, das Programm von cronjeder Minute aus zu starten und zu prüfen, ob eine Instanz ausgeführt wird. Zum einen wird das System jedoch unnötigerweise aktiviert, und zum anderen kann die Überprüfung der ausgeführten Instanzen einen Race-Condition aufweisen.

Eine dritte Möglichkeit besteht darin, es auszuführen ~/.bash_profile, aber ich möchte es ohne Benutzeranmeldung starten.

Wu Yongzheng
quelle

Antworten:

15

Sie können cron verwenden, wenn Ihre Version über die @rebootFunktion verfügt. Von Mann 5 Crontab :

Anstelle der ersten fünf Felder kann eine von acht Sonderzeichenfolgen angezeigt werden:

  string         meaning
  ------         -------
  @reboot        Run once, at startup.
  …

Sie können eine benutzerlokale crontab mit dem Befehl crontab -eohne Root-Rechte bearbeiten . Fügen Sie dann die folgende Zeile hinzu:

@reboot /usr/local/bin/some-command

Jetzt wird Ihr Befehl einmal beim Booten ausgeführt.

Marco
quelle
Ist es ungewöhnlich crontab -e, die Cron-Datei unter zu erstellen /tmp?
Kriegerischer Schimpanse
@Elliott Das hängt von deinem Editor ab. Am Ende landet die Datei in /var/spool/cron/crontabs.
Marco