Interaktive Hülle mit identischer Umgebung wie cron

10

Ich bin mir vieler Fallstricke in der magischen Welt der Crontabs bewusst, aber manchmal hilft es bei der Fehlerbehebung, wenn Sie eine intelligente Möglichkeit haben, eine interaktive (Bash-) Shell mit genau identischer Umgebung einzugeben, wie wenn ein Shell-Skript von einem ausgeführt wird crontab.

Jetzt habe ich mir gedacht /bin/openvt -c8 -- /bin/bash --noprofile -l, aber es erfordert Root-Rechte, setzt zu viele Variablen und eine einfache su myusernameMenge viel zusätzliche Umgebung.

Kennt jemand eine Möglichkeit, eine interaktive Bash-Shell mit einer identischen Umgebung wie Cron zu starten, für die keine Root-Berechtigungen für Kubuntu erforderlich sind?

Bonus, wenn es in einer SSH-Sitzung, in der GUI und auf einem oder mehreren der folgenden Betriebssysteme funktioniert: HP-UX, Solaris und AIX

Jippie
quelle

Antworten:

14

Führen Sie aus crontab -eund fügen Sie einen Eintrag mit hinzu

* * * * * export -p > ~/cron-env

(Wenn unter Solaris oder einem System, das keine POSIX-Shell zur Interpretation dieser Befehlszeile verwendet, verwenden Sie /usr/xpg4/bin/sh -c 'export -p > ~/cron-env'oder wie auch immer der Pfad zum Standard shauf diesem System lautet).

Warten Sie eine Minute und entfernen Sie diese Zeile.

Sie sollten jetzt eine cron-envDatei in Ihrem Home-Verzeichnis haben.

Sie können dann ausführen:

cd && env -i sh -c '. ./cron-env; exec sh'

So starten Sie eine Shell mit derselben Umgebung wie Ihr Cron-Job.

Stéphane Chazelas
quelle
Interessant, werde es überprüfen, wenn ich in etwa einer Stunde zurückkomme.
Jippie
Genial, wirkt wie ein Traum!
Jippie
Sehr gute Antwort. Ich würde mehr als einmal abstimmen, wenn ich könnte.
Sukima
2

Cron ist keine interaktive Shell, das ist also Ihr erstes Problem. Es ist jedoch meistens ignorierbar.

Die reale Sache ist: Umgebungsvariablen. Sehen Sie sich die Header einer Cron-Mail an, um sie zu finden, und legen Sie dann die Variablen in Ihrer Shell so fest, dass sie mit ihnen übereinstimmen, und deaktivieren Sie alle verbleibenden Variablen.

Jetzt sind Sie einer Umgebung ziemlich nahe, wie Cron es sieht.

Dennis Kaarsemaker
quelle
Ich habe nie bemerkt, dass die Mail-Header einen Teil der Umgebung enthalten. Thunderbird verbirgt diese standardmäßig vor dem Benutzer. Die Header repräsentieren leider nicht die gesamte Umgebung.
Jippie