diff --git a/services/herdd/service.c b/services/herdd/service.c index aa700a6..0c654d2 100644 --- a/services/herdd/service.c +++ b/services/herdd/service.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -174,6 +175,22 @@ int service_start(struct service *svc) { log("Starting %s...", svc->s_description); - log_ok("Started %s.", svc->s_description); - return 0; + pid_t child = 0; + char *const argv[] = { + svc->s_name, + NULL, + }; + + int err = posix_spawn(&child, svc->s_exec, NULL, NULL, argv, NULL); + + if (err == 0) { + log_ok("Started %s.", svc->s_description); + } else { + log_fail( + "Failed to start %s (%s)", + svc->s_description, + strerror(errno)); + } + + return err; }