Eu tenho um script bash que é a única tarefa é executar um arquivo jar.
sms.sh
java -jar /volume1/homes/jar/smssender.jar
Usando o meu Synology NAS, configurei uma tarefa.
Adicionando o comando para executar o script bash. Adicionando saída de log.
Executando minha nova tarefa.
Verificando o log para ver o seguinte erro:
/volume1/homes/jar/sms.sh: linha 1: java: comando não encontrado
Verificando a versão / instalação do Java:
Verificando a execução do script sh manualmente (funcionando):
Alguém com esse mesmo caso estranho? Alguma solução / idéias?
eu tentei
- Reiniciando meu NAS
- Desinstalar / instalar o pacote Java8
mas nenhum funcionou.
/whatever/path/to/java/is/java /volume1/homes/jar
(isso não é específico daRespostas:
Quando o agendador de tarefas Synology executa o script,
sms.sh
a configuração PATH é obtida do script/etc/crontab
. O que não contém o caminho Java.O ambiente de shell de login padrão é definido int
/etc/profile
. No final, há uma seção para adicionar o caminho Java.Como já foi mencionado nos comentários já fornecidos, não é sugerido um script de perfil destinado a um shell interativo. Você pode imitar o comportamento do
/etc/profile
script em seusms.sh
script para definir CLASSPATH PATH JAVA_HOME LANG.Os pontos levantados sobre a codificação do caminho no seu script e a portabilidade reduzida resultante podem ter uma precedência de amante nesse caso específico.
fonte
Eu não estou familiarizado com
Synology
tão fwiw ...O script do shell funciona quando executado na linha de comando, porque a sessão de login específica já carregou um conjunto de variáveis de ambiente (por exemplo, ao efetuar o login no
.profile/.bashrc
(s) script (s) no diretório inicial, é fornecida e as várias variáveis de ambiente específicas do java são carregadas -PATH, JAVA_HOME, CLASSPATH
, etc) que permitem quejava
o script seja executado sem problemas.O
Synology
erro do trabalho com falha indica que as variáveis de ambiente específicas do java não foram carregadas e, portanto, o trabalho / script não pode ser localizadojava
.Supondo
Synology
que não haja uma definição / sinalizador de configuração que estipule para pré-carregar o perfil de um login, a solução 'fácil' seria editar o script (sms.sh
) e obter o arquivo de recurso apropriado antes de executar qualquer operação (por exemplo, chamadajava
). Um exemplo simples:NOTAS :
root
pelo nome do login sob o qual o script será executado (nasSynology
imagens de exemplo , parece que você escolheu oroot
usuário, por isso meu exemplo é referente~root
)~root/.bashrc
pelo caminho para o perfil do usuário para pré-carregar as variáveis de ambiente necessárias para permitir que o script encontrejava
fonte
.bashrc
não muda a forma como os daemons operam, certo?), Mas podem causar quebra de produção./etc/profile.d
ao invés de~/.bashrc
ser relevante..profile
, outros usando.bash_profile
, alguns usando/etc/profile.d
, algumas definindo variáveis de ambiente do PAM, etc.) . De uma forma ou de outra, você está fazendo algo não portável. Pelo menos a codificação codificadaPATH=$PATH:/whatever/specific/location
está alterando as configurações, e seu comportamento é óbvio para os leitores (que não precisam se preocupar em mudar mais tarde).