esrcript cron Blues
-
22-09-2019 - |
Frage
Ich habe eine eScript Datei, die fein über die Befehlszeile ausgeführt wird, das heißt:.
./escript_file
Es sollte cron, freundlich sein und alle Pfade sind explizit, aber wenn ich es ausführen, schlägt es kompilieren zu sagen, dass es bad attributes
.
Die schlechten Eigenschaften in Frage sind Makrodefinitionen:
-define(COOKIE, 'somecookie').
Die Antwort
Dank Geoff Bereit Vorschlag untersuchte ich die Version von Erlang von ausgeführt wurde init:script_id()
Ausdrucken, die druckt einen String wie {"OPT APN 181 O1", "R13B"}
und sicher genug die Kommandozeile und cron-Versionen wurden verschiedene Versionen Abholung.
Das Skript hatte eine Anfangszeile:
#!/usr/bin/env escript
und das Betriebssystem war ‚finden‘ Erlang für mich. Die unterschiedlichen Umgebungsvariablen von cron gemeint, dass eine andere erlang (Geoff erste Antwort, und man wusste ich irgendwie, konnte aber nicht sehen, wie es Dinge beeinflussen würde) aufgenommen wurde.
Die Lösung ist dann die Version zu zwingen, mit einer Startlinie:
#!/usr/local/lib/erlang/erts-5.7.3/bin/escript
Postscript
Es gab auch eine andere Ubuntu apt-get
von einer früheren Version von Erlang installieren (in einem anderen Ort, die Quelle installieren) und eine verirrte 64-Bit installieren ...
Die Umgebung cron einfach weiter zurück zu älteren und obskuren Installationen fallen, andernfalls die ganze Zeit: (
Lösung
Vielleicht Cron ist eine andere Version von erlang im Weg aufnimmt. Erlang R12B Dokumentation sagt, dass eScript ignoriert Präprozessor Richtlinien neben include_lib. Erlang R13b Dokumentation sagt, dass der Präprozessor auf die Datei ausgeführt wird. Das wäre auf jeden Fall den Unterschied im Verhalten erklären.
Andere Tipps
Wenn es gut von der Kommandozeile arbeitet, eine wahrscheinliche Ursache ist ein Unterschied in den Umgebungsvariablen für Ihre interaktive Shell im Vergleich zu, wenn cron das Skript ausgeführt wird.