Tenho várias consultas que precisam ser executadas todas as noites. Achei que poderia fazer o seguinte:
cd /var/discourse
./launcher enter app
su postgres
crontab -e
... adicione minhas tarefas e salve ...
mas recebo um erro:
postgres@EN-Discourse-Forums-app:~$ crontab -e
crontab: instalando novo crontab
crontab: crontabs/postgres: rename: Operação não permitida
crontab: edições deixadas em /tmp/crontab.7kGYwA/crontab
Isso é possível?
Falco
(Falco)
Outubro 4, 2019, 7:11pm
2
A maneira mais “Discourse-way” de fazer isso seria criar um plugin com as consultas como tarefas agendadas.
Confira este exemplo:
# frozen_string_literal: true
module ::Jobs
class PatreonSyncPatronsToGroups < ::Jobs::Scheduled
every 6.hours
sidekiq_options retry: false
def execute(args)
unless SiteSetting.patreon_enabled && SiteSetting.patreon_creator_access_token &&
SiteSetting.patreon_creator_refresh_token
return
end
::Patreon::Patron.update!
::Patreon.set("last_sync", at: Time.now)
end
end
end
Dentro do bloco execute, você pode fazer qualquer coisa, como neste job que executa SQL:
Potencialmente, sim, mas isso não permite que outras pessoas que possam precisar alterar o comportamento dessas consultas, ou que nossos servidores usem algo que compreendam, o façam. É muito comum usar CRON para executar consultas.
Falco
(Falco)
Outubro 4, 2019, 7:18pm
4