Ich möchte eine Crontab schreiben, die Firefox jede Minute öffnet (nur um es zu testen, ich weiß, dass es keinen Sinn ergibt). Mein Problem ist, dass, obwohl die Crontab aktiv ist, nichts passiert. So sieht meine Crontab aus:
SHELL=/bin/bash
PATH=~/bin:/usr/bin:bin
* * * * * export DISPLAY=:0.0 xhost localuser /usr/bin/firefox
Irgendeine Idee, warum es nicht funktioniert?
Antwort1
export DISPLAY=:0.0 xhost localuser /usr/bin/firefox
Allein durch das Betrachten des obigen Cron-Befehls kann ich erkennen, warum er nicht funktioniert. Die Verwendung des export
Befehls ist
export name[=word]...
In POSIX-Shells werden die restlichen Wörter export DISPLAY=:0.0
als andere Shell-Variablen behandelt, die in die Umgebung exportiert werden sollen – nicht als Befehle, die ausgeführt werden. POSIX (Ausgabe 7, Ausgabe 2018) gibt außerdem an, dass einNamesollte sein
ein Wort, das ausschließlich aus Unterstrichen, Ziffern und Buchstaben des portablen Zeichensatzes besteht.
Dies bedeutet, dass Shell-Variablennamen keine Zeichen wie enthalten dürfen. Daher würde der Versuch, in die Liste der zu exportierenden Variablennamen /
aufzunehmen, einen Fehler mit einer Meldung wie oder auslösen ./usr/bin/firefox
not a valid identifier
bad variable name
Außerdem xhost
wird der Befehl falsch verwendet. Führen Sie xhost
ihn einzeln aus, um zu sehen, ob Sie Ihr Benutzerkonto als zulässigen Benutzer hinzufügen müssen. Dies sollte nur einmal ausgeführt werden müssen und nicht von Cron geplant werden.
Sofern kein anderer Mechanismus vorhanden ist, der Programme daran hindert, eine Verbindung zum X-Anzeigeserver herzustellen, können die obigen Zeilen einfach durch Folgendes ersetzt werden:
DISPLAY=:0.0
* * * * * /usr/bin/firefox
SHELL
Dadurch sollte jede Minute ein neues Firefox-Fenster geöffnet werden. Es ist auch nicht erforderlich, die Umgebungsvariable anzugeben – und da Sie den vollständigen Pfad für die firefox
ausführbare Datei angeben, muss die PATH
Variable auch nicht festgelegt werden.
Siehe auch:POSIX-Spezifikation fürexport