Estou tendo problemas para executar meu programa Java em cron
. Consigo recriar o problema, usando um exemplo simples, conforme explicado abaixo:
No arquivo /path/to/javaenv.txt
eu defino minha CLASSPATH
variável da seguinte forma:
export CLASSPATH=\
"/path/to/dir1":\
"/path/to/dir2":\
"/path/to/dirn":\
"/path/to/jar1":\
"/path/to/jar2":\
"/path/to/jarn"
Na linha de comando, posso executar o programa Java facilmente, fazendo algo assim:
source "/path/to/javaenv.txt" && java pkgName.ClassName cmd-line-params > /tmp/test-$(date +%s).txt 2>&1
No entanto, o trabalho não é executado cron
, embora my crontab
tenha a seguinte entrada:
* * * * * source "/path/to/javaenv.txt" && java pkgName.ClassName cmd-line-params > /tmp/test-$(date +%s).txt 2>&1
Existem alguns problemas em sua programação cron:
O
%
caractere tem um significado especial em crontabs e deve ser escapado como\%
se você quisesse usá-lo normalmente na linha de comando. Veja Como posso executar `date` dentro de um trabalho crontab?O
source
comando pode não ser suportado pelo shell que o interpreta no agendamento. Isso depende de qual shell/bin/sh
está no seu sistema (dash
não suporta osource
comando não padrão). Certifique-se de usar.
(um ponto) no lugar desource
para tornar seu comando portátil. Veja, por exemplo, não é possível usar `source` do cron?Uma possível terceira questão é se o
java
executável foi encontrado ou não, e isso depende do valor daPATH
variável no ambiente cron. Se você quiser garantir que issojava
seja encontrado, definaPATH
para incluir o diretório correto no crontab, o arquivo de ambiente que você originou ou invoque o executável com seu caminho absoluto.