diff --git a/server/bin/immich-healthcheck b/server/bin/immich-healthcheck
index cf0accb8dd..81528157e4 100755
--- a/server/bin/immich-healthcheck
+++ b/server/bin/immich-healthcheck
@@ -1,3 +1,22 @@
 #!/usr/bin/env bash
 
-node /usr/src/app/dist/bin/healthcheck.js
+if [[ ( $IMMICH_WORKERS_INCLUDE != '' && $IMMICH_WORKERS_INCLUDE != *api* ) || $IMMICH_WORKERS_EXCLUDE == *api* ]]; then
+        echo "API worker excluded, skipping";
+        exit 0;
+fi
+
+IMMICH_HOST="${IMMICH_HOST:-localhost}"
+IMMICH_PORT="${IMMICH_PORT:-2283}"
+
+result=$(curl -fsS -m 2 http://"$IMMICH_HOST":"$IMMICH_PORT"/api/server/ping)
+result_exit=$?
+
+if [ $result_exit != 0 ]; then
+        echo "Fail: exit code is $result_exit";
+        exit 1;
+fi
+
+if [ "$result" != "{\"res\":\"pong\"}" ]; then
+        echo "Fail: didn't reply with pong";
+        exit 1;
+fi
diff --git a/server/src/bin/healthcheck.ts b/server/src/bin/healthcheck.ts
deleted file mode 100644
index 2613ee6a19..0000000000
--- a/server/src/bin/healthcheck.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env node
-import { ImmichWorker } from 'src/enum';
-import { ConfigRepository } from 'src/repositories/config.repository';
-
-const main = async () => {
-  const { host, workers, port } = new ConfigRepository().getEnv();
-  if (!workers.includes(ImmichWorker.API)) {
-    process.exit();
-  }
-
-  const controller = new AbortController();
-  const timeout = setTimeout(() => controller.abort(), 2000);
-  try {
-    const response = await fetch(`http://${host || 'localhost'}:${port}/api/server/ping`, {
-      signal: controller.signal,
-    });
-
-    if (response.ok) {
-      const body = await response.json();
-      if (body.res === 'pong') {
-        process.exit();
-      }
-    }
-  } catch (error) {
-    if (error instanceof DOMException === false) {
-      console.error(error);
-    }
-  } finally {
-    clearTimeout(timeout);
-  }
-
-  process.exit(1);
-};
-
-void main();