Estou tentando adicionar um cron job simples para rodar no meu container Docker. Quero que ele seja adicionado durante a configuração, para que seja executado automaticamente quando ./launcher rebuild app for concluído.
O cron job funciona quando o adiciono manualmente ao arquivo /etc/cron.d/anacron usando vim, mas se eu editá-lo sem abrir e salvar o arquivo (ou seja, com echo -n '* * * * * root python3 /var/www/discourse/script/email_me.py' >> /etc/cron.d/anacron), o cron parece não detectar a alteração e não executa a tarefa.
Se, em seguida, eu adicionar um espaço em qualquer lugar do arquivo com vim e salvar, o cron detecta a alteração e começa a executar a tarefa.
Como as alterações não são detectadas ao adicioná-las com o comando echo, adicionar esse comando ao meu arquivo app.yml não funciona.
Também tentei docker restart app após inserir as alterações com echo, mas ainda assim não funcionou.
Sinto que deve haver uma maneira mais fácil que estou deixando passar. Ter que editar o arquivo anacron após a configuração parece ser o caminho errado para fazer isso.
Obrigado por me responder! Talvez isso faça mais sentido:
Estou executando um repositório do Discourse hospedado privadamente com alguns arquivos personalizados.
Tenho um arquivo no diretório script do Discourse chamado email_me.py.
Ao ser executado, esse arquivo me envia um e-mail dizendo “Hello World!”.
Quero criar um trabalho cron no contêiner Docker do Discourse que execute esse arquivo a cada minuto.
Isso pode ser feito adicionando manualmente a linha * * * * * root python3 /var/www/discourse/script/email_me.py ao arquivo /etc/cron.d/anacron usando um editor como vim.
Quero que o trabalho cron acima seja executado quando o contêiner do Discourse for configurado, mas não posso usar vim para isso a partir do arquivo app.yml.
Tentei usar echo -n '* * * * * root python3 /var/www/discourse/script/email_me.py' >> /etc/cron.d/anacron como um comando no arquivo app.yml. Isso adiciona com sucesso a linha ao arquivo anacron, mas o trabalho NÃO é executado (como se a alteração não tivesse sido registrada).
Estou simplesmente tentando encontrar uma maneira de fazer com que o trabalho: * * * * * root python3 /var/www/discourse/script/email_me.py
seja executado após a reconstrução com ./launcher rebuild app.
Você deve realmente seguir o conselho do @eviltrout e fazer isso corretamente em um plugin usando nossos agendamentos de trabalho Sidekiq.
Mas, se quiser mexer nessas alterações não suportadas do cron, provavelmente precisará reiniciar o serviço após adicionar um trabalho com sv restart cron.
Para ficar mais claro, estou curioso sobre qual é o seu objetivo final, e não os passos que você está usando para alcançá-lo. Se o objetivo é receber um e-mail a cada minuto, isso pode ser feito em um job do Sidekiq dentro de um plugin, o que é significativamente mais simples.
Meu objetivo final é executar uma consulta no banco de dados em busca de atividade específica de usuários e enviar um e-mail com uma tabela contendo os resultados. Esse e-mail servirá como confirmação prévia de pagamento, pois os usuários que realizaram essa atividade específica serão pagos mais tarde no mesmo dia (via PayPal) por meio de outro script executado pelo cron.
Já tenho scripts capazes de fazer ambas as coisas, mas preciso encontrar uma maneira de fazer o container do Discourse executá-los uma vez por semana.
Não estou familiarizado com o Sidekiq. Se ele puder fazer isso, onde devo procurar para aprendê-lo?
Obrigado!
(Também tentei sv restart cron e muitas outras maneiras de reiniciar o cron, sem sucesso)
Sim, funcionou perfeitamente. Eu precisei criar a pasta rr e os arquivos cron.d.rr. Coloquei minha tarefa agendada no arquivo cron.d.rr e o comando cp funcionou.
Obrigado!
Agora, vou me dedicar a escrever um plugin adequado…