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 :(

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top