diff options
author | Anthony G. Basile <blueness@gentoo.org> | 2012-12-10 14:49:39 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2012-12-19 15:53:33 -0500 |
commit | 12677acf0a0bda4a863279ece65eccda6c36d6b1 (patch) | |
tree | c93e3cece76881ebfbc09747fc841db94f2797d5 | |
parent | 393c395ca50d0b95003d5adfc6d1ca95763cc732 (diff) | |
download | busybox-w32-12677acf0a0bda4a863279ece65eccda6c36d6b1.tar.gz busybox-w32-12677acf0a0bda4a863279ece65eccda6c36d6b1.tar.bz2 busybox-w32-12677acf0a0bda4a863279ece65eccda6c36d6b1.zip |
CONFIG_PID_FILE_PATH: new configuration option for pidfile paths
We set a default path for the directory where pidfiles are create
when FEATURE_PIDFILE is selected. The default has no effect on
applets which must specify a pidfile path on the command line to
run, and it can be overridden by applets which optionally allow
the user to specify the pidfile path.
We also add pidfile write/remove support for klogd, ntpd and watchdog.
For syslogd, we add a missing remove_pidfile() for better cleanup
on daemon exit.
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r-- | Config.in | 13 | ||||
-rw-r--r-- | miscutils/crond.c | 2 | ||||
-rw-r--r-- | miscutils/watchdog.c | 3 | ||||
-rw-r--r-- | networking/ifplugd.c | 2 | ||||
-rw-r--r-- | networking/inetd.c | 6 | ||||
-rw-r--r-- | networking/ntpd.c | 3 | ||||
-rw-r--r-- | sysklogd/klogd.c | 3 | ||||
-rw-r--r-- | sysklogd/syslogd.c | 5 | ||||
-rw-r--r-- | util-linux/acpid.c | 2 |
9 files changed, 30 insertions, 9 deletions
@@ -310,7 +310,18 @@ config FEATURE_PIDFILE | |||
310 | default y | 310 | default y |
311 | help | 311 | help |
312 | This option makes some applets (e.g. crond, syslogd, inetd) write | 312 | This option makes some applets (e.g. crond, syslogd, inetd) write |
313 | a pidfile in /var/run. Some applications rely on them. | 313 | a pidfile at the configured PID_FILE_PATH. It has no effect |
314 | on applets which require pidfiles to run. | ||
315 | |||
316 | config PID_FILE_PATH | ||
317 | string "Path to directory for pidfile" | ||
318 | default "/var/run" | ||
319 | depends on FEATURE_PIDFILE | ||
320 | help | ||
321 | This is the default path where pidfiles are created. Applets which | ||
322 | allow you to set the pidfile path on the command line will override | ||
323 | this value. The option has no effect on applets that require you to | ||
324 | specify a pidfile path. | ||
314 | 325 | ||
315 | config FEATURE_SUID | 326 | config FEATURE_SUID |
316 | bool "Support for SUID/SGID handling" | 327 | bool "Support for SUID/SGID handling" |
diff --git a/miscutils/crond.c b/miscutils/crond.c index a0b73c774..582dc991a 100644 --- a/miscutils/crond.c +++ b/miscutils/crond.c | |||
@@ -885,7 +885,7 @@ int crond_main(int argc UNUSED_PARAM, char **argv) | |||
885 | xsetenv("SHELL", DEFAULT_SHELL); /* once, for all future children */ | 885 | xsetenv("SHELL", DEFAULT_SHELL); /* once, for all future children */ |
886 | crondlog(LVL8 "crond (busybox "BB_VER") started, log level %d", G.log_level); | 886 | crondlog(LVL8 "crond (busybox "BB_VER") started, log level %d", G.log_level); |
887 | rescan_crontab_dir(); | 887 | rescan_crontab_dir(); |
888 | write_pidfile("/var/run/crond.pid"); | 888 | write_pidfile(CONFIG_PID_FILE_PATH "/crond.pid"); |
889 | 889 | ||
890 | /* Main loop */ | 890 | /* Main loop */ |
891 | t2 = time(NULL); | 891 | t2 = time(NULL); |
diff --git a/miscutils/watchdog.c b/miscutils/watchdog.c index ee28dc30d..d3a76edf0 100644 --- a/miscutils/watchdog.c +++ b/miscutils/watchdog.c | |||
@@ -31,6 +31,7 @@ static void watchdog_shutdown(int sig UNUSED_PARAM) | |||
31 | { | 31 | { |
32 | static const char V = 'V'; | 32 | static const char V = 'V'; |
33 | 33 | ||
34 | remove_pidfile(CONFIG_PID_FILE_PATH "/watchdog.pid"); | ||
34 | write(3, &V, 1); /* Magic, see watchdog-api.txt in kernel */ | 35 | write(3, &V, 1); /* Magic, see watchdog-api.txt in kernel */ |
35 | if (ENABLE_FEATURE_CLEAN_UP) | 36 | if (ENABLE_FEATURE_CLEAN_UP) |
36 | close(3); | 37 | close(3); |
@@ -95,6 +96,8 @@ int watchdog_main(int argc, char **argv) | |||
95 | stimer_duration, htimer_duration * 1000); | 96 | stimer_duration, htimer_duration * 1000); |
96 | #endif | 97 | #endif |
97 | 98 | ||
99 | write_pidfile(CONFIG_PID_FILE_PATH "/watchdog.pid"); | ||
100 | |||
98 | while (1) { | 101 | while (1) { |
99 | /* | 102 | /* |
100 | * Make sure we clear the counter before sleeping, | 103 | * Make sure we clear the counter before sleeping, |
diff --git a/networking/ifplugd.c b/networking/ifplugd.c index 88bf448fa..86586f0fe 100644 --- a/networking/ifplugd.c +++ b/networking/ifplugd.c | |||
@@ -551,7 +551,7 @@ int ifplugd_main(int argc UNUSED_PARAM, char **argv) | |||
551 | applet_name = xasprintf("ifplugd(%s)", G.iface); | 551 | applet_name = xasprintf("ifplugd(%s)", G.iface); |
552 | 552 | ||
553 | #if ENABLE_FEATURE_PIDFILE | 553 | #if ENABLE_FEATURE_PIDFILE |
554 | pidfile_name = xasprintf(_PATH_VARRUN"ifplugd.%s.pid", G.iface); | 554 | pidfile_name = xasprintf(CONFIG_PID_FILE_PATH "/ifplugd.%s.pid", G.iface); |
555 | pid_from_pidfile = read_pid(pidfile_name); | 555 | pid_from_pidfile = read_pid(pidfile_name); |
556 | 556 | ||
557 | if (opts & FLAG_KILL) { | 557 | if (opts & FLAG_KILL) { |
diff --git a/networking/inetd.c b/networking/inetd.c index 00baf6971..584c5e5e4 100644 --- a/networking/inetd.c +++ b/networking/inetd.c | |||
@@ -186,8 +186,6 @@ | |||
186 | #define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN 0 | 186 | #define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN 0 |
187 | #endif | 187 | #endif |
188 | 188 | ||
189 | #define _PATH_INETDPID "/var/run/inetd.pid" | ||
190 | |||
191 | #define CNT_INTERVAL 60 /* servers in CNT_INTERVAL sec. */ | 189 | #define CNT_INTERVAL 60 /* servers in CNT_INTERVAL sec. */ |
192 | #define RETRYTIME 60 /* retry after bind or server fail */ | 190 | #define RETRYTIME 60 /* retry after bind or server fail */ |
193 | 191 | ||
@@ -1132,7 +1130,7 @@ static void clean_up_and_exit(int sig UNUSED_PARAM) | |||
1132 | if (ENABLE_FEATURE_CLEAN_UP) | 1130 | if (ENABLE_FEATURE_CLEAN_UP) |
1133 | close(sep->se_fd); | 1131 | close(sep->se_fd); |
1134 | } | 1132 | } |
1135 | remove_pidfile(_PATH_INETDPID); | 1133 | remove_pidfile(CONFIG_PID_FILE_PATH "/inetd.pid"); |
1136 | exit(EXIT_SUCCESS); | 1134 | exit(EXIT_SUCCESS); |
1137 | } | 1135 | } |
1138 | 1136 | ||
@@ -1181,7 +1179,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv) | |||
1181 | setgroups(1, &gid); | 1179 | setgroups(1, &gid); |
1182 | } | 1180 | } |
1183 | 1181 | ||
1184 | write_pidfile(_PATH_INETDPID); | 1182 | write_pidfile(CONFIG_PID_FILE_PATH "/inetd.pid"); |
1185 | 1183 | ||
1186 | /* never fails under Linux (except if you pass it bad arguments) */ | 1184 | /* never fails under Linux (except if you pass it bad arguments) */ |
1187 | getrlimit(RLIMIT_NOFILE, &rlim_ofile); | 1185 | getrlimit(RLIMIT_NOFILE, &rlim_ofile); |
diff --git a/networking/ntpd.c b/networking/ntpd.c index 5b92db6f6..7facf9484 100644 --- a/networking/ntpd.c +++ b/networking/ntpd.c | |||
@@ -2080,6 +2080,8 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv) | |||
2080 | */ | 2080 | */ |
2081 | cnt = G.peer_cnt * (INITIAL_SAMPLES + 1); | 2081 | cnt = G.peer_cnt * (INITIAL_SAMPLES + 1); |
2082 | 2082 | ||
2083 | write_pidfile(CONFIG_PID_FILE_PATH "/ntpd.pid"); | ||
2084 | |||
2083 | while (!bb_got_signal) { | 2085 | while (!bb_got_signal) { |
2084 | llist_t *item; | 2086 | llist_t *item; |
2085 | unsigned i, j; | 2087 | unsigned i, j; |
@@ -2195,6 +2197,7 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv) | |||
2195 | } | 2197 | } |
2196 | } /* while (!bb_got_signal) */ | 2198 | } /* while (!bb_got_signal) */ |
2197 | 2199 | ||
2200 | remove_pidfile(CONFIG_PID_FILE_PATH "/ntpd.pid"); | ||
2198 | kill_myself_with_sig(bb_got_signal); | 2201 | kill_myself_with_sig(bb_got_signal); |
2199 | } | 2202 | } |
2200 | 2203 | ||
diff --git a/sysklogd/klogd.c b/sysklogd/klogd.c index efa0e537a..f59a155b4 100644 --- a/sysklogd/klogd.c +++ b/sysklogd/klogd.c | |||
@@ -195,6 +195,8 @@ int klogd_main(int argc UNUSED_PARAM, char **argv) | |||
195 | 195 | ||
196 | syslog(LOG_NOTICE, "klogd started: %s", bb_banner); | 196 | syslog(LOG_NOTICE, "klogd started: %s", bb_banner); |
197 | 197 | ||
198 | write_pidfile(CONFIG_PID_FILE_PATH "/klogd.pid"); | ||
199 | |||
198 | used = 0; | 200 | used = 0; |
199 | while (!bb_got_signal) { | 201 | while (!bb_got_signal) { |
200 | int n; | 202 | int n; |
@@ -258,6 +260,7 @@ int klogd_main(int argc UNUSED_PARAM, char **argv) | |||
258 | 260 | ||
259 | klogd_close(); | 261 | klogd_close(); |
260 | syslog(LOG_NOTICE, "klogd: exiting"); | 262 | syslog(LOG_NOTICE, "klogd: exiting"); |
263 | remove_pidfile(CONFIG_PID_FILE_PATH "/klogd.pid"); | ||
261 | if (bb_got_signal) | 264 | if (bb_got_signal) |
262 | kill_myself_with_sig(bb_got_signal); | 265 | kill_myself_with_sig(bb_got_signal); |
263 | return EXIT_FAILURE; | 266 | return EXIT_FAILURE; |
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c index fc380d9f9..5854bcd0f 100644 --- a/sysklogd/syslogd.c +++ b/sysklogd/syslogd.c | |||
@@ -916,6 +916,7 @@ static void do_syslogd(void) | |||
916 | 916 | ||
917 | timestamp_and_log_internal("syslogd exiting"); | 917 | timestamp_and_log_internal("syslogd exiting"); |
918 | puts("syslogd exiting"); | 918 | puts("syslogd exiting"); |
919 | remove_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid"); | ||
919 | if (ENABLE_FEATURE_IPC_SYSLOG) | 920 | if (ENABLE_FEATURE_IPC_SYSLOG) |
920 | ipcsyslog_cleanup(); | 921 | ipcsyslog_cleanup(); |
921 | kill_myself_with_sig(bb_got_signal); | 922 | kill_myself_with_sig(bb_got_signal); |
@@ -979,8 +980,10 @@ int syslogd_main(int argc UNUSED_PARAM, char **argv) | |||
979 | if (!(opts & OPT_nofork)) { | 980 | if (!(opts & OPT_nofork)) { |
980 | bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv); | 981 | bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv); |
981 | } | 982 | } |
983 | |||
982 | //umask(0); - why?? | 984 | //umask(0); - why?? |
983 | write_pidfile("/var/run/syslogd.pid"); | 985 | write_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid"); |
986 | |||
984 | do_syslogd(); | 987 | do_syslogd(); |
985 | /* return EXIT_SUCCESS; */ | 988 | /* return EXIT_SUCCESS; */ |
986 | } | 989 | } |
diff --git a/util-linux/acpid.c b/util-linux/acpid.c index 5d2792948..38421c2d7 100644 --- a/util-linux/acpid.c +++ b/util-linux/acpid.c | |||
@@ -235,7 +235,7 @@ int acpid_main(int argc UNUSED_PARAM, char **argv) | |||
235 | const char *opt_action = "/etc/acpid.conf"; | 235 | const char *opt_action = "/etc/acpid.conf"; |
236 | const char *opt_map = "/etc/acpi.map"; | 236 | const char *opt_map = "/etc/acpi.map"; |
237 | #if ENABLE_FEATURE_PIDFILE | 237 | #if ENABLE_FEATURE_PIDFILE |
238 | const char *opt_pidfile = "/var/run/acpid.pid"; | 238 | const char *opt_pidfile = CONFIG_PID_FILE_PATH "/acpid.pid"; |
239 | #endif | 239 | #endif |
240 | 240 | ||
241 | INIT_G(); | 241 | INIT_G(); |