mirror of
https://github.com/troglobit/finit.git
synced 2026-10-02 14:02:52 +07:00
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>
42 lines
1.1 KiB
C
42 lines
1.1 KiB
C
#ifndef FINIT_COND_H_
|
|
#define FINIT_COND_H_
|
|
|
|
#include <paths.h>
|
|
#include <svc.h>
|
|
|
|
#define COND_DIR "finit/cond"
|
|
#define COND_PATH _PATH_VARRUN COND_DIR
|
|
#define COND_RECONF COND_PATH "/reconf"
|
|
|
|
typedef enum cond_state {
|
|
COND_OFF = 0,
|
|
COND_FLUX,
|
|
COND_ON
|
|
} cond_state_t;
|
|
|
|
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);
|
|
enum cond_state cond_get_path(const char *path);
|
|
enum cond_state cond_get (const char *name);
|
|
enum cond_state cond_get_agg (const char *names);
|
|
int cond_affects (const char *name, const char *names);
|
|
|
|
int cond_set_path (const char *path, enum cond_state new);
|
|
void cond_set (const char *name);
|
|
void cond_set_oneshot (const char *name);
|
|
void cond_clear (const char *name);
|
|
void cond_reload (void);
|
|
void cond_reassert (const char *pat);
|
|
void cond_init (void);
|
|
|
|
#endif /* FINIT_COND_H_ */
|
|
|
|
/**
|
|
* Local Variables:
|
|
* indent-tabs-mode: t
|
|
* c-file-style: "linux"
|
|
* End:
|
|
*/
|