Package: sysvinit Version: 2.93-3 Severity: normal Tags: patch Dear Maintainer,
My package uses init-d-script and relies on defining a custom "do_start_prepare" function to prevent starting the daemon if a specific file exists. While this works fine, it fails when the init.d script is invoked with "restart" or "reload". In this case the "do_start_prepare" function is not called. There doesn't seem to be a similar mechanism for "restart" and "reload". This makes my init.d script significantly more complicated to implement (cleanly). Please consider the attached patch. Cheers, Mat. -- System Information: Debian Release: buster/sid APT prefers testing APT policy: (500, 'testing'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.19.0-1-amd64 (SMP w/4 CPU cores) Locale: LANG=C, LC_CTYPE=C (charmap=UTF-8) (ignored: LC_ALL set to C.UTF-8), LANGUAGE=C (charmap=UTF-8) (ignored: LC_ALL set to C.UTF-8) Shell: /bin/sh linked to /bin/dash Init: runit (via /run/runit.stopit) *** /tmp/init-d-script.patch diff -urN a/init-d-script b/init-d-script --- a/init-d-script 2019-01-05 12:21:53.000000000 +0100 +++ b/init-d-script 2019-01-29 20:39:37.896029340 +0100 @@ -124,6 +124,9 @@ } do_restart() { + if is_call_implemented do_restart_prepare ; then + call do_restart_prepare + fi [ "$VERBOSE" != no ] && log_daemon_msg "Restarting $DESC" "$NAME" call do_stop_cmd call do_start_cmd @@ -131,6 +134,9 @@ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac + if is_call_implemented do_restart_cleanup ; then + call do_restart_cleanup + fi } do_force_reload() { @@ -144,10 +150,16 @@ # Enable this using # alias do_reload=do_reload_sigusr1 do_reload_sigusr1() { + if is_call_implemented do_reload_prepare ; then + call do_reload_prepare + fi log_daemon_msg "Reloading $DESC configuration files" "$NAME" start-stop-daemon --oknodo --stop --signal 1 --quiet \ --pidfile "$PIDFILE" --exec "$DAEMON" log_end_msg $? + if is_call_implemented do_reload_cleanup ; then + call do_reload_cleanup + fi } do_status() {