Я работаю с Django и хочу, чтобы определенная задача выполнялась два раза в день (09:00 и 17:00). Итак, я нашел сельдерей в Интернете, и он выглядит хорошо. Я следовал нескольким инструкциям и настроил его.
Я установил периодическую задачу в базе данных, и она запускается (для теста) каждую минуту. Или это не так, это только говорит так:
[2020-12-15 14:32:34,997: INFO/MainProcess] Scheduler: Sending due task ResumePentest (VulnManager.tasks.resumePentest)
[2020-12-15 14:32:34,998: DEBUG/MainProcess] VulnManager.tasks.resumePentest sent. id->277c73a8-58bc-41ea-b2ba-4aa7af0c8b94
Я не думаю, что он на самом деле работает, потому что я пробовал несколько разных вариантов «отладки»: создать файл, распечатать текст, запустить мою настоящую команду. Кажется, ни один из них не работает.
Мой файл tasks.py выглядит так (для тестирования):
from __future__ import absolute_import, unicode_literals
from celery import shared_task
@shared_task
def resumePentest():
f = open("/home/marvin/demofile2.txt", "a")
f.write("Now the file has more content!")
f.close()
Я запускаю работника сельдерея с помощью этой команды:
celery -A VulnScanner beat -l DEBUG --scheduler django_celery_beat.schedulers:DatabaseScheduler
Любые подсказки? Не уверен, что я делаю неправильно? Если требуется дополнительная информация, пожалуйста, дайте мне знать.
Полный вывод celery worker:
celery beat v5.0.4 (singularity) is starting.
__ - ... __ - _
LocalTime -> 2020-12-15 14:44:26
Configuration ->
. broker -> amqp://guest:**@localhost:5672//
. loader -> celery.loaders.app.AppLoader
. scheduler -> django_celery_beat.schedulers.DatabaseScheduler
. logfile -> [stderr]@%DEBUG
. maxinterval -> 5.00 seconds (5s)
[2020-12-15 14:44:26,388: DEBUG/MainProcess] Setting default socket timeout to 30
[2020-12-15 14:44:26,389: INFO/MainProcess] beat: Starting...
[2020-12-15 14:44:26,389: DEBUG/MainProcess] DatabaseScheduler: initial read
[2020-12-15 14:44:26,389: DEBUG/MainProcess] Writing entries...
[2020-12-15 14:44:26,390: DEBUG/MainProcess] DatabaseScheduler: Fetching database schedule
[2020-12-15 14:44:26,392: DEBUG/MainProcess] Using selector: EpollSelector
[2020-12-15 14:44:26,396: DEBUG/MainProcess] Current schedule:
<ModelEntry: ResumePentest VulnManager.tasks.resumePentest(*[], **{}) <freq: 1.00 minute>>
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) <crontab: 0 4
* *
* (m/h/d/dM/MY), UTC>
>
[2020-12-15 14:44:26,429: DEBUG/MainProcess] beat: Ticking with max interval->5.00 seconds
[2020-12-15 14:44:26,448: DEBUG/MainProcess] Start from server, version: 0.9, properties: {'capabilities': {'publisher_confirms': True, 'exchange_exchange_bindings': True, 'basic.nack': True, 'consumer_cancel_notify': True, 'connection.blocked': True, 'consumer_priorities': True, 'authentication_failure_close': True, 'per_consumer_qos': True, 'direct_reply_to': True}, 'cluster_name': 'rabbit@ubuntuserver', 'copyright': 'Copyright (c) 2007-2019 Pivotal Software, Inc.', 'information': 'Licensed under the MPL 1.1. Website: https://rabbitmq.com', 'platform': 'Erlang/OTP 22.2.7', 'product': 'RabbitMQ', 'version': '3.8.2'}, mechanisms: [b'PLAIN', b'AMQPLAIN'], locales: ['en_US']
[2020-12-15 14:44:26,449: INFO/MainProcess] Scheduler: Sending due task ResumePentest (VulnManager.tasks.resumePentest)
[2020-12-15 14:44:26,455: DEBUG/MainProcess] using channel_id: 1
[2020-12-15 14:44:26,457: DEBUG/MainProcess] Channel open
[2020-12-15 14:44:26,459: DEBUG/MainProcess] beat: Synchronizing schedule...
[2020-12-15 14:44:26,459: DEBUG/MainProcess] Writing entries...
[2020-12-15 14:44:26,467: DEBUG/MainProcess] VulnManager.tasks.resumePentest sent. id->d33fe09b-2e25-4f7b-aec9-03ea4a630ab9
[2020-12-15 14:44:26,469: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2020-12-15 14:44:31,477: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
^C[2020-12-15 14:44:33,765: DEBUG/MainProcess] Writing entries...
[2020-12-15 14:44:33,766: DEBUG/MainProcess] Writing entries...
[2020-12-15 14:44:33,766: DEBUG/MainProcess] Writing entries...
[2020-12-15 14:44:33,766: DEBUG/MainProcess] Writing entries...
Конечная цель использования этого — запустить (в 9:00) и остановить (в 17:00) сканирование безопасности с помощью greenbone/gvm-cli.
Попробуйте использовать эту команду для проверки новой задачи: celery -A proj worker -l INFO
.
Для получения полного списка доступных параметров командной строки используйте команду справки: celery help
Это сделало это. Мне действительно нужен был рабочий, но также и сельдерей. Спасибо за помощь.