From fe27ed17eb2a57d639c23c6898d8dfd39de55e8b Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Thu, 4 Mar 2021 07:27:06 +0100 Subject: [PATCH] initctl: status command formatting updates, add origin .conf file Signed-off-by: Joachim Wiberg --- src/initctl.c | 14 +++++++++++--- src/service.c | 2 ++ src/svc.h | 9 ++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/initctl.c b/src/initctl.c index 07f7e687..38bccb48 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -492,15 +492,23 @@ static int show_status(char *arg) if (arg && arg[0]) { long now = jiffies(); char buf[42] = "N/A"; + char cmd[512]; svc = client_svc_find(arg); if (!svc) return 1; - printf("Service : %s\n", svc->cmd); - printf("Description : %s\n", svc->desc); + strlcat(cmd, svc->cmd, sizeof(cmd)); + for (int i = 1; svc->args[i] && i < MAX_NUM_SVC_ARGS; i++) { + strlcat(cmd, " ", sizeof(cmd)); + strlcat(cmd, svc->args[i], sizeof(cmd)); + } + printf("Identity : %s\n", svc_ident(svc, ident, sizeof(ident))); + printf("Description : %s\n", svc->desc); + printf("Origin : %s\n", svc->file[0] ? svc->file : "built-in"); printf("Environment : %s\n", svc->env); + printf("Command : %s\n", cmd); printf("PID : %d\n", svc->pid); printf("Uptime : %s\n", svc->pid ? uptime(now - svc->start_time, buf, sizeof(buf)) : buf); printf("Runlevels : %s\n", runlevel_string(runlevel, svc->runlevels)); @@ -760,7 +768,7 @@ int main(int argc, char *argv[]) { "stop", do_stop }, { "restart", do_restart }, { "status", show_status }, - { "show", show_status }, /* Convenience alias */ + { "show", show_status }, /* Convenience alias, for now */ { "ps", show_cgroup }, diff --git a/src/service.c b/src/service.c index c6ac3951..bd7d4724 100644 --- a/src/service.c +++ b/src/service.c @@ -1162,6 +1162,8 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file) strlcpy(svc->desc, desc, sizeof(svc->desc)); if (env) parse_env(svc, env); + if (file) + strlcpy(svc->file, file, sizeof(svc->file)); /* Set configured limits */ memcpy(svc->rlimit, rlimit, sizeof(svc->rlimit)); diff --git a/src/svc.h b/src/svc.h index 23cd5a81..cf510127 100644 --- a/src/svc.h +++ b/src/svc.h @@ -86,9 +86,8 @@ typedef enum { typedef struct svc { TAILQ_ENTRY(svc) link; - /* Instance specifics */ - int job; /* JOB: */ - char id[MAX_ID_LEN]; /* :ID */ + /* Origin of service */ + char file[MAX_ARG_LEN]; /* Limits and scoping */ struct rlimit rlimit[RLIMIT_NLIMITS]; @@ -110,7 +109,11 @@ typedef struct svc { int sighup; /* This service supports SIGHUP :) */ svc_block_t block; /* Reason that this service is currently stopped */ char cond[MAX_COND_LEN]; + + /* Instance specifics */ + int job; /* For intenal use only, canonical ref is NAME:ID */ char name[MAX_ARG_LEN]; + char id[MAX_ID_LEN]; /* :ID */ /* Counters */ char once; /* run/task, (at least) once per runlevel */