Eu tenho uma linha como esta no meu cronjob:
22 9 * * 1-5 cd ~/execution/samples/Cpp/data_logger/; ./data_logger_static 127.0.0.1 $TWS_LIVE_PORT &> SPY-STK.csv
Funcionou muito bem e gravou vários dados em um arquivo chamado SPY-STK.csv
.
No entanto, recentemente fiz isso em um servidor remoto e ele parou de funcionar. O arquivo é criado, mas está simplesmente vazio. O mesmo código em todos os lugares e tentei manter o sistema operacional igual também. Não faço ideia do que verificar.
- SO antigo da máquina local: Ubuntu 22.04
- Novo sistema operacional de máquina remota: Ubuntu 23.10
- Versão antiga do bash: GNU bash, versão 5.1.16(1)-release (x86_64-pc-linux-gnu)
- Novo bash de máquina remota: GNU bash, versão 5.2.15(1)-release (x86_64-pc-linux-gnu)
A saída que me interessa é do fluxo de saída de erro (ou seja, std::cerr
em c++).
O
&>
redirecionamento stdout + stderr é um bashismo - o shell padrão para tarefas cron é/bin/sh
que irá interpretá-lo como&
(colocar trabalho em segundo plano) e>
(redirecionar apenas stdout).Portanto, use redirecionamentos POSIX
ou defina o cron shell para bash antes da entrada do trabalho
(Expansões de variáveis como
$TWS_LIVE_PORT
devem estar entre aspas duplas em sh e bash.)