Script de shell truncado quando executado a partir do cron ou em

0

Estou vendo um comportamento muito estranho em um NAS baseado em Linux (DNS-323) que tenho. Eu estou usando um script de shell simples para fazer backup dos arquivos no NAS para outra caixa. Depois de fazer algumas adições recentes, o script começou a falhar quando foi executado a partir de cron ou at . Não teve problemas quando executei o script diretamente.

Após um lote de depuração, eu finalmente percebi que qualquer coisa depois de um certo ponto simplesmente não era executada. É como se o roteiro estivesse cortado. Consegui contornar o problema encurtando o script (principalmente removendo comentários), e agora parece estar funcionando. Embora ainda esteja curioso para saber por que isso está acontecendo.

Alguém mais viu algo assim? Qual poderia ser a causa disso?

    
por Dominic P 01.04.2014 / 21:50

1 resposta

1

A maior diferença aqui é que parece que estamos trabalhando em um tipo de sistema embarcado.

Se eu estiver lendo isso corretamente, é o script que parece estar truncado e não a saída (que pode então ser enviada por email). Eu vou atender a cada um.

Se for de fato o script, mas funcionar quando executado diretamente, sugiro o seguinte:

  1. O script é particularmente grande?
  2. O script apresenta recursos específicos do Bash ("bashisms") ... observe que / bin / sh pode - e geralmente é - diferente. Você pode gostar de definir SHELL = / bin / bash no seu crontab (se estiver disponível)
  3. Você está tentando escrever seu script no seu crontab ou está chamando um arquivo de script.
  4. O comportamento muda se você redirecionar ambos stdout e stderr para um arquivo em um sistema de arquivos com amplo espaço livre?
  5. Em casos como esse, acho útil criar uma entrada crontab temporária que chama o comando 'env' e redireciona a saída para um arquivo ou e-mail. Às vezes, isso pode mostrar diferenças inesperadas no ambiente (como configurações de localidade, que geralmente são diferentes).
  6. Você pode colocar um 'set -x' no seu arquivo de script. Isso fará com que ele envie informações de depuração à medida que o script prossiga. Você pode usar 'set + x' para desativá-lo. Isso é útil para determinar onde o script terminará a execução.
  7. Que tipo de software está sendo usado aqui:
    • SMTP: qual é a saída de 'sendmail --version' ou 'sendmail -v'

Se, de fato, foi a saída, então devo dizer que o comportamento dependeria muito do MTA sendo usado. Em um ambiente integrado, ele pode exceder um determinado tamanho de buffer (talvez isso seja acionado pelo espaço disponível no sistema de arquivos).

Além disso, você verificou se há firmware atualizado: link O mais recente parece ser a versão 1.10 a partir de maio de 2012

    
por 01.04.2014 / 22:48