diff --git a/greg/management/commands/role_end_notifier.py b/greg/management/commands/role_end_notifier.py
index c26d3a736d397a20ddcbd33705ce79c43018d6a3..569cae3ae6c36b39135011d4f0bc836c59e1bdb3 100644
--- a/greg/management/commands/role_end_notifier.py
+++ b/greg/management/commands/role_end_notifier.py
@@ -1,28 +1,51 @@
 """
-Command for scheduling the django-q task for notifying sponsors of
+Command for scheduling or running the task for notifying sponsors of
 expiring roles.
-
-Instead of having a task that gets scheduled, we could have had a
-management command that was run as a cronjob. However, that would mean
-another cronjob
 """
 
 import logging
 import logging.config
 
 from django.conf import settings
-from django.core.management.base import BaseCommand
+from django.core.management.base import BaseCommand, CommandParser
+from django.db import transaction
 from django_q.tasks import schedule
 
+from greg.tasks import notify_sponsors_roles_ending
 
 logging.config.dictConfig(settings.LOGGING)
 logger = logging.getLogger(__name__)
 
 
 class Command(BaseCommand):
-    help = "Schedule notification of sponsors"
+    help = __doc__
+
+    def add_arguments(self, parser: CommandParser) -> None:
+        parser.add_argument(
+            "--schedule",
+            default=False,
+            action="store_true",
+            help="Add a scheduled task for running the role end notifier",
+        )
+        parser.add_argument(
+            "--run-once",
+            default=False,
+            action="store_true",
+            help="Run the import once",
+        )
 
     def handle(self, *args, **options):
+        if options["schedule"]:
+            self.schedule()
+            return
+
+        if options["run_once"]:
+            notify_sponsors_roles_ending()
+            return
+
+        logger.info("Nothing done")
+
+    def schedule(self, *args, **options):
         logger.info("Scheduling role end notifier task...")
         schedule(
             func="greg.tasks.notify_sponsors_roles_ending",