unitard/README.md

51 lines
1.8 KiB
Markdown
Raw Normal View History

2022-11-24 19:09:42 +10:30
# unitard - automatically deploy a systemd unit file from your application
## 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.