esrcript cron blues
-
22-09-2019 - |
Domanda
Ho un escript file che funziona bene da riga di comando, cioè:
./escript_file
Esso è destinato a essere cron amichevole e tutti i percorsi sono esplicite, ma quando lo avvio, non riesce a compilare dicendo che ci sono bad attributes
.
Il male attributi in questione sono le definizioni di macro:
-define(COOKIE, 'somecookie').
La Risposta
Grazie a Geoff Pronto il suggerimento che ho studiato la versione di Erlang è stato in esecuzione da la stampa init:script_id()
che stampa una stringa come {"OPT APN 181 O1", "R13B"}
e, abbastanza sicuro, la riga di comando cron versioni sono state raccogliendo diverse versioni.
La sceneggiatura era una linea iniziale:
#!/usr/bin/env escript
e il sistema operativo è stato 'ricerca' Erlang per me.Le diverse variabili di ambiente di cron significava che un diverso erlang era stato colto (Geoff prima risposta, e ho un pò sapevamo, ma non riuscivo a vedere come sarebbe influenzare le cose).
La soluzione, allora, è per forza la versione con una linea di partenza:
#!/usr/local/lib/erlang/erts-5.7.3/bin/escript
Postscript
C'era anche un diverso Ubuntu apt-get
installazione di una versione precedente di Erlang (in una posizione diversa per la sorgente di installazione) e un errante 64-bit installare...
Il cron ambiente continuava a cadere di nuovo al più vecchio e più oscuro installa, in mancanza per tutto il tempo :(
Soluzione
Forse cron sta raccogliendo una versione diversa di erlang nel percorso. Erlang R12B documentazione dice che escript ignora le direttive del preprocessore oltre include_lib. Erlang R13B documentazione dice che il preprocessore è eseguire il file.Che sarebbe sicuramente spiegare la differenza di comportamento.
Altri suggerimenti
Se si sta lavorando bene da riga di comando, una causa probabile è una differenza nelle variabili di ambiente per la vostra shell interattiva rispetto a quando cron esegue lo script.