Skip to content

[Suggestion] 'restart --with-dependents' does not restart dependents if they are already running #43

@ericreeves

Description

@ericreeves

I love seeing how wpmctl is shaping up.

As I've been relying on it for managing Komorebi, Yasb, whkd, Altsnap, and Masir, I've implemented the following 'desktop.toml':

[Unit]
Name = "desktop"
Description = "Everything I need to work on Windows"
Requires = [
    "yasb",
    "whkd",
    "komorebi",
    "altsnap",
    "masir",
]

[Service]
Kind = "Simple"
Autostart = true
Restart = "Never"

[Service.ExecStart]
Executable = "cmd.exe"
Arguments = ["/c", "pause"]

With this configuration, I would intuitively expect "wpmctl restart -d desktop" would fully stop/start all of the dependent services, but it does not. It WILL start them if they are stopped/failed, though.

2025-06-02T15:56:59.868268Z  INFO wpmd: received socket message: RestartWithDependents(["desktop"])
2025-06-02T15:56:59.868369Z  INFO wpmd: successfully queued socket message
2025-06-02T15:56:59.868442Z  INFO wpm::process_manager: desktop: stopping unit
2025-06-02T15:56:59.868594Z  INFO wpm::process_manager: desktop: sending kill signal to 42484
2025-06-02T15:56:59.870610Z  INFO wpm::process_manager: desktop: process 42484 successfully terminated
2025-06-02T15:56:59.870707Z  INFO wpm::process_manager: desktop: requires yasb
2025-06-02T15:56:59.870821Z  INFO wpm::process_manager: desktop: requires whkd
2025-06-02T15:56:59.870908Z  INFO wpm::process_manager: desktop: requires komorebi
2025-06-02T15:56:59.870985Z  INFO wpm::process_manager: desktop: requires altsnap
2025-06-02T15:56:59.871108Z  INFO wpm::process_manager: desktop: requires masir
2025-06-02T15:56:59.871177Z  INFO wpm::unit: desktop: starting unit
2025-06-02T15:56:59.873365Z  INFO wpm::unit: desktop: running pid 43408 liveness healthcheck (1s)
2025-06-02T15:57:00.928557Z  INFO wpm::unit: desktop: passed healthcheck

Example if a service is not running (masir):

2025-06-02T15:57:48.311490Z  INFO wpmd: received socket message: RestartWithDependents(["desktop"])
2025-06-02T15:57:48.311588Z  INFO wpmd: successfully queued socket message
2025-06-02T15:57:48.311654Z  INFO wpm::process_manager: desktop: stopping unit
2025-06-02T15:57:48.311722Z  INFO wpm::process_manager: desktop: sending kill signal to 43408
2025-06-02T15:57:48.313694Z  INFO wpm::process_manager: desktop: process 43408 successfully terminated
2025-06-02T15:57:48.313784Z  INFO wpm::process_manager: desktop: requires yasb
2025-06-02T15:57:48.313918Z  INFO wpm::process_manager: desktop: requires whkd
2025-06-02T15:57:48.313998Z  INFO wpm::process_manager: desktop: requires komorebi
2025-06-02T15:57:48.314070Z  INFO wpm::process_manager: desktop: requires altsnap
2025-06-02T15:57:48.314128Z  INFO wpm::process_manager: desktop: requires masir
2025-06-02T15:57:48.314190Z  INFO wpm::unit: masir: starting unit
2025-06-02T15:57:48.317518Z  INFO wpm::unit: masir: running pid 53036 liveness healthcheck (1s)
2025-06-02T15:57:49.365251Z  INFO wpm::unit: masir: passed healthcheck
2025-06-02T15:57:49.365356Z  INFO wpm::unit: desktop: starting unit
2025-06-02T15:57:49.368648Z  INFO wpm::unit: desktop: running pid 34664 liveness healthcheck (1s)
2025-06-02T15:57:50.418196Z  INFO wpm::unit: desktop: passed healthcheck

In a similar vein, "stop --with-dependents" feels like it would with go along with this command/pattern nicely, and behave in the same way.

Thoughts?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions