Hello,
per documentation, it is possible to run slurm on non systemd system with IgnoreSystemd=yes in cgroup.conf.
However I had an error with slurmd:
error: common_file_write_content: unable to open '/sys/fs/cgroup/system.slice/cgroup.subtree_control' for writing: No such file or directory
error: Cannot enable cpuset in /sys/fs/cgroup/system.slice/cgroup.subtree_control: No such file or directory
error: common_file_write_content: unable to open '/sys/fs/cgroup/system.slice/cgroup.subtree_control' for writing: No such file or directory
error: Cannot enable memory in /sys/fs/cgroup/system.slice/cgroup.subtree_control: No such file or directory
error: common_file_write_content: unable to open '/sys/fs/cgroup/system.slice/cgroup.subtree_control' for writing: No such file or directory
error: Cannot enable cpu in /sys/fs/cgroup/system.slice/cgroup.subtree_control: No such file or directory
error: Could not create scope directory /sys/fs/cgroup/system.slice/slurmstepd.scope: No such file or directory
error: Couldn't load specified plugin name for cgroup/v2: Plugin init() callback failed
error: cannot create cgroup context for cgroup/v2
error: Unable to initialize cgroup plugin
error: slurmd initialization failed
I could link it to the fact that '/sys/fs/cgroup/system.slice' does not exists when creating '/sys/fs/cgroup/system.slice/slurmstepd.scope' subdir.
I propose small patch to the slurm which allows to create the path recursively (aka `mkdir -p` from shell):
(also here: 
https://github.com/rlalik/slurm/tree/recurse_mkdir)
diff --git a/src/plugins/cgroup/v2/cgroup_v2.c b/src/plugins/cgroup/v2/cgroup_v2.c
index a18b9e62bd..6b7e2a2e4a 100644
--- a/src/plugins/cgroup/v2/cgroup_v2.c
+++ b/src/plugins/cgroup/v2/cgroup_v2.c
@@ -743,11 +743,40 @@ static int _init_stepd_system_scope(pid_t pid)
         return SLURM_SUCCESS;
  }
  
+/* This create path recursively.*/
+bool recurse_mkdir(const char *dirname, int mode)
+{
+       const char *p = dirname;
+       char *temp = calloc(1, strlen(dirname)+1);
+       int ret = 0;
+
+       while ((p = strchr(p, '/')) != NULL) {
+               /* Skip empty elements. Could be just multiple separators
+                * which is okay. */
+               if (p != dirname && *(p-1) == '/') {
+                       p++;
+                       continue;
+               }
+               /* Put the path up to this point into a temporary to
+                * pass to the make directory function. */
+               memcpy(temp, dirname, p-dirname);
+               temp[p-dirname] = '\0';
+               p++;
+               if ((ret = mkdir(temp, mode)) != 0) {
+                       if (errno != EEXIST) {
+                               break;
+                       }
+               }
+       }
+       free(temp);
+       return ret;
+}
+
  static int _init_new_scope(char *scope_path)
  {
         int rc;
  
-       rc = mkdir(scope_path, 0755);
+       rc = recurse_mkdir(scope_path, 0755);
         if (rc && (errno != EEXIST)) {
                 error("Could not create scope directory %s: %m", scope_path);
                 return SLURM_ERROR;