Search code examples
gorestartsystemd

What should be the mode and channel while restarting unit files


In go-systemd, what should be the second and third parameters for restarting the units.

// RestartUnit restarts a service.  If a service is restarted that isn't
// running it will be started.
func (c *Conn) RestartUnit(name string, mode string, ch chan<- string)    (int, error) {
return c.startJob(ch, "org.freedesktop.systemd1.Manager.RestartUnit", name, mode)
}

Solution

  • From PR 203, you can see that method used/tested as:

    // Restart the unit
    reschan = make(chan string)
    _, err = conn.RestartUnit(target, "replace", reschan)
    if err != nil {
        t.Fatal(err)
    }
    
    job = <-reschan
    if job != "done" {
        t.Fatal("Job is not done:", job)
    }
    

    So you have to create your own label and channel.

    From dbus/methods.go

    // Takes the unit to activate, plus a **mode string**. 
    

    The mode needs to be one of:

    • replace (the call will start the unit and its dependencies, possibly replacing already queued jobs that conflict with this),
    • fail (the call will start the unit and its dependencies, but will fail if this would change an already queued job),
    • isolate (the call will start the unit in question and terminate all units that aren't dependencies of it),
    • ignore-dependencies (it will start a unit but ignore all its dependencies),
    • ignore-requirements (it will start a unit but only ignore the requirement dependencies).

    It is not recommended to make use of the latter two options.