53 lines
1.9 KiB
Markdown
53 lines
1.9 KiB
Markdown
# unitard - automatically deploy a systemd unit file from your application
|
|
|
|
[](https://pkg.go.dev/github.com/tardisx/unitard)
|
|
|
|
## Synopsis
|
|
|
|
import "github.com/tardisx/unitard"
|
|
|
|
func main() {
|
|
appName := "coolapp"
|
|
if deploy {
|
|
unit, _ := unitard.NewUnit(appName)
|
|
unit.Deploy()
|
|
os.Exit(0)
|
|
}
|
|
// rest of your application here
|
|
}
|
|
|
|
## What it does
|
|
|
|
`Deploy()` automatically creates a systemd unit file, reloads the systemd daemon
|
|
so it can use it, enables the unit (so it starts on boot) and starts the service
|
|
running.
|
|
|
|
This means you can have a single binary deployment. Copy your executable to "somewhere"
|
|
on your target system, run it with `-deploy` (or however you have enabled the call to `Deploy()`)
|
|
and your application starts running in the background, and will restart on boot.
|
|
|
|
There is also an `Undeploy()` func, which you should of course
|
|
provide as an option to your users. It stops the running service, removes the unit file and restarts systemd.
|
|
|
|
## What's with the name?
|
|
|
|
It's the systemd UNIT for Automatic Restart Deployment. Or, just a stupid pun based on my username.
|
|
|
|
## Does this work for root?
|
|
|
|
It's designed to not. It leverages the systemd `--user` facility, where users can configure
|
|
their own services to run persistently, with all configuration being done out of their home
|
|
directory (in `~/.config/systemd`).
|
|
|
|
See https://wiki.archlinux.org/title/Systemd/User for more information.
|
|
|
|
## It works! Until I logout, and then my program stops!
|
|
|
|
You need to enable "lingering" - see the link above.
|
|
|
|
## I want it to do X
|
|
|
|
It's designed to be almost zero configuration - you just provide an application name
|
|
(which gets used to name the `.service` file). This is by intent.
|
|
|
|
However it's not impossible that there are sensible user-configurable things. Raise an issue. |