Was sind die Unterschiede zwischen einer ausführbaren direkt von der Kommandozeile und von einem Cron-Job unter Linux läuft?

StackOverflow https://stackoverflow.com/questions/1618238

  •  06-07-2019
  •  | 
  •  

Frage

Ich habe diese ausführbare Datei, die einen Remote-Server für einen Befehl fragt, ist es auf dem lokalen Computer ausgeführt wird und gibt den stdout (und möglicherweise auch stderr) von ihm zurück an den Server.

Dieses Programm läuft nur gut, wenn von der Kommandozeile (als root) genannt, aber ich fand es für einige Befehle ist andernfalls, wenn automatisch durch den Cron-Job ausgeführt wird.

Was sind die Unterschiede in Bezug auf die Umwelt (Benutzer, stdin, stdout, etc.) Ich erwarte, sollte, wenn diese ausführbare Planung periodisch mit crontab laufen?

Danke!

War es hilfreich?

Lösung

Der wichtigste Unterschied besteht darin, dass Dateien wie Bashrc etc. sind nicht vor Cronjobs, so viele Umgebungsvariablen, die Sie normalerweise in der Befehlszeile haben fehlen. Also, wenn Ihr Programm nicht in den Cron-Job nicht, embedd es in einem Skript, das alle notwendigen Umgebungsvariablen setzt.

In Bezug auf Ein- und Ausgang, gibt es offensichtlich keine Interaktion mit dem Benutzer für Cron-Jobs, so erwarten, dass die Programme sollten nicht eingegeben (wenn sie es tun, liefern sie aus einer Eingabedatei oder direkt im Skript), und jede Ausgabe sollte in umgeleitet werden eine Protokolldatei.

Andere Tipps

  

Dieses Programm läuft nur gut, wenn von der Kommandozeile (als root) genannt, aber ich fand es für einige Befehle ist andernfalls, wenn automatisch durch den Cron-Job ausgeführt wird.

In Cronjobs können Sie festlegen, welche Benutzer das Skript wie zum Beispiel auszuführen:

0 0 * * * www-data /usr/bin/php /var/www/foo/do_work.php

Ich Angabe 'do_work.php' als www-data jeden Tag ... Diese Datei in /etc/cron.d würde laufen /

Außerdem sollten Sie wahrscheinlich die UID überprüfen, die cron die Aufgaben für den Betrieb verwendet, vor allem, wenn es sich um eine ‚globale‘ / etc / crontab Job, kein Benutzerebene ein. sein könnte, dass einige Berechtigungen fehlen, wenn der Job von ‚nobody‘ läuft oder ‚cron‘.

Hauptsächlich

  • Aktuelles Arbeitsverzeichnis - Sie können nicht garantieren, was diese von cron sein wird. Es kann $ HOME, aber zählen nicht drauf
  • Umgebungsvariablen - die meisten, die Sie Setup für normale Anmeldungen haben, werden nicht eingestellt werden, so dass die Dinge, die Umgebungsvariablen erfordern bestimmte Werte haben fehlschlagen. Dazu gehören vor allem $ PATH.
  • stdin / stdout / stderr wird kein tty sein, so werden einige Programme verhalten sich anders, weil dieser (stdout und irren wird wahrscheinlich eine temporäre Datei sein; stdin wird wahrscheinlich null)

Aber im Grunde kann man nicht auf viel verlassen

  • User-ID, Gruppen-ID und ergänzende Gruppen sollten pro einem normalen Login für den Besitzer des Cron-Jobs
  • gesetzt werden
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top