mirror of
https://github.com/troglobit/finit.git
synced 2026-10-28 12:30:44 +00:00
Fix #109: Support PID files in subdirectories to /var/run
Services, like dbus and teamd for instance, may create their PID files in a subdirectory of /var/run (today often /run). E.g., - /var/run/teamd/a1.pid -- For aggregate A1 - /var/run/dbus/pid - /var/run/lxc/foo.pid -- For container foo This patch adds support for dynamically adding inotify watchers to any new subdirectory created in /var/run (discarding too deep directories). To match services in this directory the run/task/service/sysv stanza must contain the pid:!/path/to/pidfile.pid syntax. This pid file name is also used to create the condition this service asserts using the following formula: svc/ + <dirname of service> + <subdir and file without .pid> E.g., the case of teamd (above) gives condition 'svc/usr/bin/teamd/a1' The special case of dbus is interesting, since it may not be a special case, but rather the norm for services using a subdirectory. It is handled as follows; when a new subdirectory is detected, the directory is scanned for files matching *.pid. Matching files follow the teamd case. The directory is also scanned for 'pid', which then gives us the condition 'svc/usr/bin/dbus' One last example, illustrated by lxc-start, where we want to track the condition for the LXC container foo. The service stanza: service pid:!/run/lxc/foo.pid lxc-start -n foo -F -p /run/lxc/foo.pid -- Container foo This command has no leading path so the condition is composed entirely from the PID file location: svc/ + '' + lxc/foo => svc/lxc/foo Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
1 parent
97ce0aa519
commit
54cfa74042
6 files changed
+275
-54
No files matched your search
+2
-1
@@ -2,6 +2,7 @@
|
||||
#define FINIT_COND_H_
|
||||
|
||||
#include <paths.h>
|
||||
#include <svc.h>
|
||||
|
||||
#define COND_DIR "finit/cond"
|
||||
#define COND_PATH _PATH_VARRUN COND_DIR
|
||||
@@ -13,7 +14,7 @@ typedef enum cond_state {
|
||||
COND_ON
|
||||
} cond_state_t;
|
||||
|
||||
char *mkcond (char *buf, size_t len, char *nm);
|
||||
char *mkcond (svc_t *svc, char *buf, size_t len);
|
||||
const char *condstr (enum cond_state s);
|
||||
const char *cond_path (const char *name);
|
||||
unsigned int cond_get_gen (const char *path);
|
||||
|
||||
Reference in new issue
Block a user