Eu tenho um trabalho cron que está executando um script. Quando executo o script por meio de um shell interativo (ssh'ed to bash), ele funciona bem. Quando o script é executado via cron, ele falha.
Meu palpite é que ele está usando algumas das variáveis ambientais definidas no shell interativo. Vou solucionar o script e removê-lo.
Depois de fazer as alterações, sei que poderia enfileirar o script no cron para executá-lo normalmente, mas existe uma maneira de executar o script na linha de comando, mas diga-o para executar como faria no cron - ou seja, em um ambiente não interativo?
unset
.env
e você pode tentarenv -i ./my-script.sh
. Além disso, você está recebendo uma mensagem de erro?Respostas:
As principais diferenças entre executar um comando do cron e executar na linha de comando são:
/bin/sh
);cron(8)
oucrontab(5)
man; geralmente há apenasHOME
, talvezSHELL
, talvezLOGNAME
, talvezUSER
, e um pequenoPATH
);%
personagem especialmente (ele se transforma em uma nova linha);A chamada a seguir executará o snippet do shell praticamente como se tivesse sido chamado do cron. Presumo que o trecho não contenha os caracteres
'
ou%
.Consulte também a execução de um script sh a partir do cron , o que pode ajudar a resolver seu problema.
fonte
sudo -u user /path/to/script
também seria uma maneira de executá-lo sem nenhuma variável definida?sudo
limpa algumas variáveis e define outras para um valor conhecido, mas isso depende de como está configurado. Geralmente, é configurado para manter as configurações de localidade eTERM
, por exemplo.No link do @ sr_ ( como obter um ambiente limpo em um shell ksh? ), Procurei o env e você pode tentar o seguinte:
fonte
echo -e '#!/bin/bash -i\necho interactive $-' > ~/test.sh && chmod +x ~/test.sh && env -i ~/test.sh
saídasinteractive himB
.Eu sugiro que você use caminhos absolutos para seus scripts ao colocá-lo no cron e em outros lugares e para todo e qualquer comando linux usado nele, declare-os melhor como variáveis e use-os!
fonte
O Cron não usa necessariamente o mesmo shell que você está usando. Verifica:
Para determinar o shell e tentar executar o seu script lá - ele funciona? Essa é uma causa comum de problemas para muitas pessoas que adicionam scripts ao cron.
Se este for o problema - você pode adicionar "bash" ao início do seu script no cron para forçar a execução do script no bash. Se isso não resolver o problema, avise-me e aprofundarei um pouco mais.
fonte
Se você deseja ignorar algumas perguntas interativas fornecidas por algum script, tente:
Ou,
yes "n"
se você quiser, não todas as perguntas.fonte
Para executar seu script em um shell não interativo (sem considerar os detalhes de
cron
), você pode fazer isso viassh
.Teste se você realmente acaba em um shell não interativo:
Execute o script em um shell não interativo:
fonte