Eu tenho um arquivo localizado na minha caixa Linux que é gerado por um script python, o arquivo é colocado dentro do diretório /root/
Meu script bash é assim:
#!/bin/bash
# Run the HR Data feed
cd /root/hr-feed
# the file created here will land one directory above the scripts in /root/
python main.py
# Transfer the file to the server
cd /root/
smbclient \\\\[SERVER]\\[SHARE] --workgroup=[WRKGRP] --user=[USR] [PASS] -c 'put HRDataFeed.txt'
Tudo funciona como desejado até a última linha. Ele deve estar sendo executado com um erro (embora eu não tenha certeza de como descobrir qual pode ser esse erro).
Este trabalho está sendo executado no crontab. Que, pelo que entendi, é executado em um ambiente ligeiramente diferente do root (ou pelo menos parece que funciona).
Se eu executar o script diretamente (não do crontab), ele será executado sem problemas e o arquivo será transferido para a caixa do servidor Windows de destino. Meu palpite é que talvez eu precise fornecer o caminho completo para o arquivo HRDataFeed.txt como parte do comando put; no entanto, não consigo descobrir isso.
smbclient .... -c "put /root/HRDataFeed.txt"
resulta em um erro que o arquivo/root/HRDataFeed.txtnão pode ser encontrado.
Qualquer contribuição é muito apreciada.
EDITAR
Tentei atualizar meu crontab para ler (para fins de teste, ele estava funcionando a cada minuto)
- /root/hrdatafeed > last_run.txt
No entanto, nada parecia cair no arquivo.
Tentarei apenas adicionar um canal diretamente ao comando SMBClient.
Responder1
Cron tenta enviar um email (usando /usr/bin/sendmail
) quando um comando falha - essa é a única maneira que conheço de obter a saída real do script (você pode instalarsSMTPpara fazer isso funcionar com bastante facilidade). A principal diferença no ambiente cron geralmente é $PATH
, então tente definir um apropriado PATH
no crontab que inclua o diretório onde smbclient
está.
Responder2
Acabei reescrevendo um pouco o roteiro para ficar assim:
#!/bin/bash
# Run the HR Data feed
cd /root/hr-feed
python main.py
# Transfer the file to the server
cd /root/
/usr/bin/smbclient \\\\[SERVER]\\HRDataFeed --workgroup=[WRKGRP] --user=[USR] [PASS] -c 'put HRDataFeed.txt'
Mudei meu crontab para isto:
- sh /root/hrdatafeed.sh > /root/last_run > 2>&1
Finalmente consegui obter algumas mensagens significativas no último arquivo executado. Embora não tenha havido erros, presumo que tenha sido porque fiz a alteração na configuração do caminho completo para o comando smbclient.
Obrigado por toda a ajuda para resolver isso.
Agora é claro que vou atualizar a aba cron para rodar com um pouco menos de frequência ;)