mirror of
https://github.com/troglobit/finit.git
synced 2026-10-27 12:20:54 +00:00
initctl: Support for stop/start services by name:id
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
1 parent
1f88e1ff8a
commit
263e23a0df
5 files changed
+72
-37
No files matched your search
@@ -586,24 +586,25 @@ not return until the given command has fully completed.
|
|||||||
Usage: initctl [OPTIONS] <COMMAND>
|
Usage: initctl [OPTIONS] <COMMAND>
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
-d, --debug Debug initctl (client)
|
-d, --debug Debug initctl (client)
|
||||||
-v, --verbose Verbose output
|
-v, --verbose Verbose output
|
||||||
-h, --help This help text
|
-h, --help This help text
|
||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
debug Toggle Finit (daemon) debug
|
debug Toggle Finit (daemon) debug
|
||||||
emit <EV> Emit an event. Can be a predefined event: RELOAD, STOP,
|
help This help text
|
||||||
START, or a custom string to match the event list in a
|
emit <EV> Emit event; a predefined event: RELOAD, STOP, START
|
||||||
service stanza, e.g: GW:UP, IFUP:IFNAME, IFDN:IFNAME,
|
or a custom string matching an event in a service
|
||||||
where IFNAME is the interface name, e.g. eth0
|
stanza, e.g: GW:UP, IFUP:IFNAME, IFDN:IFNAME. Where
|
||||||
reload Reload *.conf in /etc/finit.d/ and activate changes
|
IFNAME is the interface name, e.g. eth0
|
||||||
runlevel [0-9] Show or set runlevel: 0 halt, 6 reboot
|
reload Reload *.conf in /etc/finit.d/ and activate changes
|
||||||
status | show Show status of services
|
runlevel [0-9] Show or set runlevel: 0 halt, 6 reboot
|
||||||
start <JOB|NAME> Start stopped job or service
|
status | show Show status of services
|
||||||
stop <JOB|NAME> Stop/Pause running job or service
|
start <JOB|NAME>[:ID] Start service by job# or name, with optional ID
|
||||||
restart <JOB|NAME> Restart (stop/start) job or service
|
stop <JOB|NAME>[:ID] Stop/Pause a running service by job# or name
|
||||||
reload <JOB|NAME> Reload (SIGHUP) job or service
|
restart <JOB|NAME>[:ID] Restart (stop/start) service by job# or name
|
||||||
version Show Finit version
|
reload <JOB|NAME>[:ID] Reload (SIGHUP) service by job# or name
|
||||||
|
version Show Finit version
|
||||||
```
|
```
|
||||||
|
|
||||||
The `emit <EV>` command can be used to send events to Finit. Built-in
|
The `emit <EV>` command can be used to send events to Finit. Built-in
|
||||||
|
|||||||
@@ -77,10 +77,10 @@ static int call(int (*action)(svc_t *), char *buf, size_t len)
|
|||||||
token = strtok_r(input, " ", &pos);
|
token = strtok_r(input, " ", &pos);
|
||||||
while (token) {
|
while (token) {
|
||||||
svc_t *svc;
|
svc_t *svc;
|
||||||
|
char *ptr = strchr(token, ':');
|
||||||
|
|
||||||
if (isdigit(token[0])) {
|
if (isdigit(token[0])) {
|
||||||
int job = atonum(token);
|
int job = atonum(token);
|
||||||
char *ptr = strchr(token, ':');
|
|
||||||
|
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
svc = svc_job_iterator(1, job);
|
svc = svc_job_iterator(1, job);
|
||||||
@@ -95,10 +95,15 @@ static int call(int (*action)(svc_t *), char *buf, size_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
svc = svc_named_iterator(1, token);
|
if (!ptr) {
|
||||||
while (svc) {
|
svc = svc_named_iterator(1, token);
|
||||||
result += action(svc);
|
while (svc) {
|
||||||
svc = svc_named_iterator(0, token);
|
result += action(svc);
|
||||||
|
svc = svc_named_iterator(0, token);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
*ptr++ = 0;
|
||||||
|
result += action(svc_find_by_nameid(token, atonum(ptr)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -212,23 +212,24 @@ static int usage(int rc)
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: %s [OPTIONS] <COMMAND>\n\n"
|
fprintf(stderr, "Usage: %s [OPTIONS] <COMMAND>\n\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
" -d, --debug Debug initctl (client)\n"
|
" -d, --debug Debug initctl (client)\n"
|
||||||
" -v, --verbose Verbose output\n"
|
" -v, --verbose Verbose output\n"
|
||||||
" -h, --help This help text\n\n"
|
" -h, --help This help text\n\n"
|
||||||
"Commands:\n"
|
"Commands:\n"
|
||||||
" debug Toggle Finit (daemon) debug\n"
|
" debug Toggle Finit (daemon) debug\n"
|
||||||
" emit <EV> Emit an event. Can be a predefined event: RELOAD, STOP,\n"
|
" help This help text\n"
|
||||||
" START, or a custom string to match the event list in a\n"
|
" emit <EV> Emit event; a predefined event: RELOAD, STOP, START\n"
|
||||||
" service stanza, e.g: GW:UP, IFUP:IFNAME, IFDN:IFNAME,\n"
|
" or a custom string matching an event in a service\n"
|
||||||
" where IFNAME is the interface name, e.g. eth0\n"
|
" stanza, e.g: GW:UP, IFUP:IFNAME, IFDN:IFNAME. Where\n"
|
||||||
" reload Reload *.conf in /etc/finit.d/ and activate changes\n"
|
" IFNAME is the interface name, e.g. eth0\n"
|
||||||
" runlevel [0-9] Show or set runlevel: 0 halt, 6 reboot\n"
|
" reload Reload *.conf in /etc/finit.d/ and activate changes\n"
|
||||||
" status | show Show status of services\n"
|
" runlevel [0-9] Show or set runlevel: 0 halt, 6 reboot\n"
|
||||||
" start <JOB|NAME> Start stopped job or service\n"
|
" status | show Show status of services\n"
|
||||||
" stop <JOB|NAME> Stop/Pause running job or service\n"
|
" start <JOB|NAME>[:ID] Start service by job# or name, with optional ID\n"
|
||||||
" restart <JOB|NAME> Restart (stop/start) job or service\n"
|
" stop <JOB|NAME>[:ID] Stop/Pause a running service by job# or name\n"
|
||||||
" reload <JOB|NAME> Reload (SIGHUP) job or service\n"
|
" restart <JOB|NAME>[:ID] Restart (stop/start) service by job# or name\n"
|
||||||
" version Show Finit version\n\n", __progname);
|
" reload <JOB|NAME>[:ID] Reload (SIGHUP) service by job# or name\n"
|
||||||
|
" version Show Finit version\n\n", __progname);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -310,6 +310,33 @@ svc_t *svc_find_by_jobid(int job, int id)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* svc_find_by_nameid - Find an service object by its basename:ID
|
||||||
|
* @name: Process name to match
|
||||||
|
* @id: Instance id
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* A pointer to an &svc_t object, or %NULL if not found.
|
||||||
|
*/
|
||||||
|
svc_t *svc_find_by_nameid(char *name, int id)
|
||||||
|
{
|
||||||
|
char *ptr;
|
||||||
|
svc_t *svc;
|
||||||
|
|
||||||
|
for (svc = svc_iterator(1); svc; svc = svc_iterator(0)) {
|
||||||
|
ptr = strrchr(svc->cmd, '/');
|
||||||
|
if (ptr)
|
||||||
|
ptr++;
|
||||||
|
else
|
||||||
|
ptr = svc->cmd;
|
||||||
|
|
||||||
|
if (svc->id == id && !strcmp(name, ptr))
|
||||||
|
return svc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* svc_mark_dynamic - Mark dynamically loaded services for deletion.
|
* svc_mark_dynamic - Mark dynamically loaded services for deletion.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ int svc_del (svc_t *svc);
|
|||||||
svc_t *svc_find (char *cmd, int id);
|
svc_t *svc_find (char *cmd, int id);
|
||||||
svc_t *svc_find_by_pid (pid_t pid);
|
svc_t *svc_find_by_pid (pid_t pid);
|
||||||
svc_t *svc_find_by_jobid (int job, int id);
|
svc_t *svc_find_by_jobid (int job, int id);
|
||||||
|
svc_t *svc_find_by_nameid (char *name, int id);
|
||||||
|
|
||||||
svc_t *svc_iterator (int first);
|
svc_t *svc_iterator (int first);
|
||||||
svc_t *svc_inetd_iterator (int first);
|
svc_t *svc_inetd_iterator (int first);
|
||||||
|
|||||||
Reference in new issue
Block a user