Estou ciente de que esta é uma pergunta muito vaga, mas espero que alguém com mais conhecimento possa ajudar.
Minha configuração é a seguinte:
- Eu tenho um contêiner docker de nó simples
- Eu o uso para executar scripts Node.js da CLI
- Quero executar esses scripts a cada X com cron
Para fazer isso tenho o seguinte comando:
(cd ~/docker/docker-node && docker compose run --rm -w /home/node/app/scripts docker-node-container npm run my-script)
O comando acima pode ser dividido da seguinte forma:
cd ~/docker/docker-node
define o diretório de trabalho para onde meudocker-compose.yml
arquivo estádocker compose run --rm -w /home/node/app/scripts docker-node-container
executa um comando em um diretório de trabalho específico dentro de um contêiner docker específiconpm run my-script
executa o script Node.js real
Testei o comando da CLI e ele funciona bem, gerando logs do console conforme o esperado.
(cd ~/docker/docker-node && docker compose run --rm -w /home/node/app/scripts docker-node-container npm run my-script)
> [email protected] my-script
> node ./dist/my-script.js
Script is running.
Então eu adicionei ao cron executando sudo crontab -e
:
# Run every hour
0 * * * * (cd ~/docker/docker-node && docker compose run --rm -w /home/node/app/scripts docker-node-container npm run my-script)
Eu então vou verificar meus registros com sudo grep CRON /var/log/syslog
:
2024-05-10T08:18:01.787598+00:00 vps CRON[831969]: (root) CMD ((cd ~/docker/docker-node && docker compose run --rm -w /home/node/app/scripts docker-node-container npm run my-script))
2024-05-10T08:18:01.791485+00:00 vps CRON[831968]: (CRON) info (No MTA installed, discarding output)
Não apenas isso não inclui nenhum dos logs que meu script deve criar, mas depois de verificar os logs de minhas APIs, posso dizer que o script não está realmente atingindo nenhum dos endpoints para os quais deveria fazer solicitações.
Por que?
Você adicionou isso ao
root
crontab.~
assim se refere/root
. O comandocd ~/docker/docker-node
se expande paracd /root/docker/docker-node
.Provavelmente não é isso que você deseja. Uma boa ideia é usar caminhos absolutos nos scripts.