diff --git a/api/config/settings/common.py b/api/config/settings/common.py index ebfd21dd606b236eff89e5b47b7b067b01dadce8..a972ec7effc9e5696f94833c19c52096ff307f14 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -13,6 +13,8 @@ from __future__ import absolute_import, unicode_literals from urllib.parse import urlsplit import os import environ +from celery.schedules import crontab + from funkwhale_api import __version__ ROOT_DIR = environ.Path(__file__) - 3 # (/a/b/myfile.py - 3 = /) @@ -334,6 +336,16 @@ CELERY_BROKER_URL = env( # Your common stuff: Below this line define 3rd party library settings CELERY_TASK_DEFAULT_RATE_LIMIT = 1 CELERY_TASK_TIME_LIMIT = 300 +CELERYBEAT_SCHEDULE = { + 'federation.clean_music_cache': { + 'task': 'funkwhale_api.federation.tasks.clean_music_cache', + 'schedule': crontab(hour='*/2'), + 'options': { + 'expires': 60 * 2, + }, + } +} + import datetime JWT_AUTH = { 'JWT_ALLOW_REFRESH': True, diff --git a/deploy/funkwhale-beat.service b/deploy/funkwhale-beat.service new file mode 100644 index 0000000000000000000000000000000000000000..209896dd4272ca0f7ab3b683fa95a514b67f5290 --- /dev/null +++ b/deploy/funkwhale-beat.service @@ -0,0 +1,14 @@ +[Unit] +Description=Funkwhale celery beat process +After=redis.service postgresql.service +PartOf=funkwhale.target + +[Service] +User=funkwhale +# adapt this depending on the path of your funkwhale installation +WorkingDirectory=/srv/funkwhale/api +EnvironmentFile=/srv/funkwhale/config/.env +ExecStart=/srv/funkwhale/virtualenv/bin/celery -A funkwhale_api.taskapp beat -l INFO + +[Install] +WantedBy=multi-user.target diff --git a/deploy/funkwhale.target b/deploy/funkwhale.target index a920c7e34c67d31c8bb295c254d9cddc899da2a2..a09e381c4f6553dd482b2f4edd30fcfc3e851f74 100644 --- a/deploy/funkwhale.target +++ b/deploy/funkwhale.target @@ -1,3 +1,3 @@ [Unit] Description=Funkwhale -Wants=funkwhale-server.service funkwhale-worker.service +Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service diff --git a/docs/installation/systemd.rst b/docs/installation/systemd.rst index 67af98432641dc837c8313ca1578cc3974dee70f..27781c447291cfcbc0ab9279bf3eb801336ff704 100644 --- a/docs/installation/systemd.rst +++ b/docs/installation/systemd.rst @@ -13,11 +13,13 @@ First, download the sample unitfiles: curl -L -o "/etc/systemd/system/funkwhale.target" "https://code.eliotberriot.com/funkwhale/funkwhale/raw/|version|/deploy/funkwhale.target" curl -L -o "/etc/systemd/system/funkwhale-server.service" "https://code.eliotberriot.com/funkwhale/funkwhale/raw/|version|/deploy/funkwhale-server.service" curl -L -o "/etc/systemd/system/funkwhale-worker.service" "https://code.eliotberriot.com/funkwhale/funkwhale/raw/|version|/deploy/funkwhale-worker.service" + curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://code.eliotberriot.com/funkwhale/funkwhale/raw/|version|/deploy/funkwhale-beat.service" This will download three unitfiles: - ``funkwhale-server.service`` to launch the funkwhale web server - ``funkwhale-worker.service`` to launch the funkwhale task worker +- ``funkwhale-beat.service`` to launch the funkwhale task beat (this is for recurring tasks) - ``funkwhale.target`` to easily stop and start all of the services at once You can of course review and edit them to suit your deployment scenario