X-Git-Url: https://git.josue.xyz/?a=blobdiff_plain;ds=sidebyside;f=serviceman%2FREADME.md;h=e05096829e0640f695af20efd94b8582a80b01ec;hb=47076b4ef1266957c1fd2d990102a16307b5f2e6;hp=53b37b338d6d908429b5cfa27c7fb36841cb4259;hpb=06edfb6d45ca676307ccb2bd2a03ed98708de851;p=webi-installers%2F.git diff --git a/serviceman/README.md b/serviceman/README.md index 53b37b3..e050968 100644 --- a/serviceman/README.md +++ b/serviceman/README.md @@ -3,21 +3,35 @@ title: Serviceman homepage: https://git.rootprojects.org/root/serviceman tagline: | Serviceman: cross-platform service management for Linux, Mac, and Windows. -description: | - Serviceman is a hassle-free wrapper around your system launcher. It works with the default system launcher to make it easy to start _user_- and _system_-level services, such as webservers, backup scripts, network and system tools, etc. - - Supports - - `launchctl` (macOS) - - `systemctl` (Linux) - - The Registry (Windows) --- +To update or switch versions, run `webi serviceman@stable` + +## Cheat Sheet + +> Serviceman is a hassle-free wrapper around your system launcher. It works with +> the default system launcher to make it easy to start _user_- and +> _system_-level services, such as webservers, backup scripts, network and +> system tools, etc. + +Supports + +- `launchctl` (macOS) +- `systemctl` (Linux) +- The Registry (Windows) + Serviceman can run an app in just about any programming language very simply. If you'd like to learn what `serviceman` does without actually making changes, add the `--dryrun` option. -### Node.js +### Example: Bash + +```bash +sudo env PATH="$PATH" serviceman add bash ./backup.sh /mnt/data +``` + +### Example: Node.js **Development Server** @@ -25,7 +39,8 @@ add the `--dryrun` option. pushd ./my-node-app/ sudo env PATH="$PATH" \ - serviceman add --system --cap-net-bind npx nodemon + serviceman add --system --cap-net-bind \ + npx nodemon ./server.js ``` **Production Server** @@ -34,10 +49,11 @@ sudo env PATH="$PATH" \ pushd ./my-node-app/ sudo env PATH="$PATH" \ - serviceman add --system --cap-net-bind npm start + serviceman add --system --cap-net-bind \ + npm start ``` -### Golang +### Example: Golang ```bash pushd ./my-go-package/ @@ -56,10 +72,88 @@ sudo env PATH="$PATH" \ ./my-service --port 80 ``` -### And even bash! +### How to see all services ```bash -sudo env PATH="$PATH" serviceman add bash ./backup.sh /mnt/data +serviceman list --system +serviceman list --user +``` + +```txt +serviceman-managed services: + + example-service +``` + +### How to restart a service + +You can either `add` the service again (which will update any changed options), +or you can `stop` and then `start` any service by its name: + +```bash +sudo env PATH="$PATH" serviceman stop example-service +sudo env PATH="$PATH" serviceman start example-service +``` + +## What a typical systemd .service file looks like + +```txt +[Unit] +Description=example-service +After=network-online.target +Wants=network-online.target systemd-networkd-wait-online.service + +[Service] +Restart=always +StartLimitInterval=10 +StartLimitBurst=3 + +User=root +Group=root + +WorkingDirectory=/srv/example-service +ExecStart=/srv/example-service/bin/example-command start +ExecReload=/bin/kill -USR1 $MAINPID + +# Allow the program to bind on privileged ports, such as 80 and 443 +CapabilityBoundingSet=CAP_NET_BIND_SERVICE +AmbientCapabilities=CAP_NET_BIND_SERVICE +NoNewPrivileges=true + +[Install] +WantedBy=multi-user.target +``` + +## What a typical launchd .plist file looks like + +```txt + + + + + + Label + example-service + ProgramArguments + + /Users/me/example-service/bin/example-command + start + + + RunAtLoad + + KeepAlive + + + WorkingDirectory + /Users/me/example-service + + StandardErrorPath + /Users/me/.local/share/example-service/var/log/example-service.log + StandardOutPath + /Users/me/.local/share/example-service/var/log/example-service.log + + ``` ### Use `--dryrun` to see the generated launcher config: