diff --git a/build/redis/Dockerfile b/build/redis/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..bcb479ff0b4b614c9a7475f98928d18405d49f6e
--- /dev/null
+++ b/build/redis/Dockerfile
@@ -0,0 +1,6 @@
+FROM redis:6
+
+COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint-mg.sh
+
+ENTRYPOINT [ "docker-entrypoint-mg.sh" ]
+CMD ["redis-server"]
\ No newline at end of file
diff --git a/build/redis/docker-entrypoint.sh b/build/redis/docker-entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e31ee4da5b9f09553425eb354079e6572f993bfa
--- /dev/null
+++ b/build/redis/docker-entrypoint.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+_term() {
+    echo -n "Waiting for clients to disconnect before stopping"
+    while [ "$(redis-cli info clients | grep "connected_clients" | cut -d ":" -f 2 | tr -dc '0-9')" -gt 1 ];
+    do
+      echo -n "."
+      sleep 1;
+    done
+    echo ""
+    echo "Stopping Redis Server with PID $REDIS_PID"
+    kill -s SIGKILL $REDIS_PID
+    exit 1
+}
+trap _term SIGTERM
+
+echo "Starting Redis Server"
+docker-entrypoint.sh "$@" &
+REDIS_PID=$!
+wait
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 973d749f241e8772383c359d04f3b90c68582f1d..1147566c199a01d9f391188431cab04145f2b202 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -37,7 +37,7 @@ services:
       <<: *fpm_build
     restart: unless-stopped
     entrypoint: /usr/local/bin/php
-    command: artisan schedule:work
+    command: artisan schedule:work-mg
     volumes:
       - ./metager:/metager/metager_app
     healthcheck:
@@ -82,7 +82,8 @@ services:
       - ./metager:/home/node/metager
       - node_cache:/home/node/.npm
   redis:
-    image: redis:6
+    build:
+      context: ./build/redis
     restart: unless-stopped
     user: "redis:redis"
     healthcheck:
diff --git a/metager/app/Console/Commands/ScheduleWorker.php b/metager/app/Console/Commands/ScheduleWorker.php
new file mode 100644
index 0000000000000000000000000000000000000000..985c2cb74db9c2ad18dea9e8637056771a5618da
--- /dev/null
+++ b/metager/app/Console/Commands/ScheduleWorker.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+
+class ScheduleWorker extends Command
+{
+    private $should_exit = false;
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'schedule:work-mg';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Starts the schedule worker with correct signal handling and graceful shutdown.';
+
+    /**
+     * Execute the console command.
+     *
+     * @return int
+     */
+    public function handle()
+    {
+        pcntl_signal(SIGQUIT, array(&$this, "onExit"));
+        $this->info("Starting Scheduler");
+        $this->call('schedule:run');
+        do {
+            sleep(60);
+            $this->call('schedule:run');
+        } while (!$this->should_exit);
+        return 0;
+    }
+
+    public function onExit()
+    {
+        $this->info("Stopping Scheduler on SIGQUIT");
+        $this->should_exit = true;
+    }
+}