diff --git a/auxdir/Makefile.am b/auxdir/Makefile.am
index dfb4f40af1a58a7ed3b9827bdee86839602f4b15..cb9e63f9fc95bb8832802d49bbba67e2a322a297 100644
--- a/auxdir/Makefile.am
+++ b/auxdir/Makefile.am
@@ -35,4 +35,5 @@ EXTRA_DIST = \
     x_ac_readline.m4 \
     x_ac_setproctitle.m4 \
     x_ac_sgi_job.m4 \
-    x_ac_slurm_ssl.m4
+    x_ac_slurm_ssl.m4 \
+    x_ac_systemd.m4
diff --git a/auxdir/x_ac_systemd.m4 b/auxdir/x_ac_systemd.m4
new file mode 100644
index 0000000000000000000000000000000000000000..88c28699d2cb836902f3844df2275f8583e7c37b
--- /dev/null
+++ b/auxdir/x_ac_systemd.m4
@@ -0,0 +1,60 @@
+##*****************************************************************************
+# AUTHOR:
+#	Written by Alejandro Sanchez - alex@schedmd.com
+#
+# SYNOPSIS:
+#	X_AC_SYSTEMD
+#
+# DESCRIPTION:
+#	Determine systemd presence
+#	Determine systemd version
+#	Determine systemd system unit dir
+##*****************************************************************************
+
+AC_DEFUN([X_AC_SYSTEMD],
+[
+
+	AC_CACHE_CHECK([for systemd presence],
+			[_cv_systemd_presence],
+			[PKG_CHECK_EXISTS([systemd],
+					[_cv_systemd_presence=yes],
+					[_cv_systemd_presence=no])])
+
+	if [ test "x$_cv_systemd_presence" != "xno" ]; then
+		AC_DEFINE([HAVE_SYSTEMD],
+			[1],
+			[Define systemd presence])
+
+		AC_CACHE_CHECK([for systemd version],
+			[_cv_systemd_version],
+			[AS_IF([_cv_systemd_version=$($PKG_CONFIG --modversion systemd 2>/dev/null)],
+				[],
+				[_cv_systemd_version=no])])
+
+		AS_IF([test "x$_cv_systemd_version" != "xno"],
+			[AC_DEFINE([SYSTEMD_VERSION],
+				[$_cv_systemd_version],
+				[Define systemd version identified])]
+
+			[AM_CONDITIONAL([HAVE_SYSTEMD_TASKSMAX],
+				[ test -n "$_cv_systemd_version" && test "$_cv_systemd_version" -ge 227 ])]
+
+			[AM_COND_IF([HAVE_SYSTEMD_TASKSMAX],
+				[AC_SUBST([SYSTEMD_TASKSMAX_OPTION], ["TasksMax=infinity"])],
+				[AC_SUBST([SYSTEMD_TASKSMAX_OPTION], [""])])])
+
+		# In the future we might want to enable the configure option
+		#  --with-systemdsystemunitdir=DIR, so that users can specify
+		# at configure time the directory to install the .service files.
+		# https://www.freedesktop.org/software/systemd/man/daemon.html#Installing%20Systemd%20Service%20Files
+
+		#AC_CACHE_CHECK([for systemd system unit dir],
+		#		[_cv_systemd_systemunitdir],
+		#		[PKG_CHECK_VAR([SYSTEMD_SYSTEM_UNIT_DIR],
+		#				[systemd],
+		#				[systemdsystemunitdir],
+		#				[_cv_systemd_systemunitdir=$SYSTEMD_SYSTEM_UNIT_DIR],
+		#				[_cv_systemd_systemunitdir=no])])
+	fi
+
+])
diff --git a/configure.ac b/configure.ac
index 6fa484d1186a648124a716dd3491a0e8d5f254c0..44699ae09528f47ad6cf229ed840727aa30e99fd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -352,6 +352,11 @@ X_AC_SLURM_WITH_SSL
 AM_CONDITIONAL(HAVE_OPENSSL, test "x$ac_have_openssl" = "xyes")
 AC_SUBST(HAVE_OPENSSL)
 
+dnl
+dnl Check for systemd presence, version and system unit dir
+dnl
+X_AC_SYSTEMD
+
 dnl
 dnl Check for compilation of SLURM auth modules:
 dnl