show ./server.js explicitly
[webi-installers/.git] / serviceman / README.md
index 5da565739124a19a1005747f74e1bc61336d82e9..d071731d3bae40bd8906ce3371f54477d55117a3 100644 (file)
@@ -23,31 +23,39 @@ add the `--dryrun` option.
 
 ```bash
 pushd ./my-node-app/
+
 sudo env PATH="$PATH" \
-    serviceman add --cap-net-bind --system npx nodemon
+    serviceman add --system --cap-net-bind \
+    npx nodemon ./server.js
 ```
 
 **Production Server**
 
 ```bash
 pushd ./my-node-app/
+
 sudo env PATH="$PATH" \
-    serviceman add --cap-net-bind --system npm start
+    serviceman add --system --cap-net-bind \
+    npm start
 ```
 
 ### Golang
 
 ```bash
 pushd ./my-go-package/
+
 sudo env PATH="$PATH" \
-    serviceman add --system go run -mod=vendor cmd/my-service/*.go --port 3000
+    serviceman add --system \
+    go run -mod=vendor cmd/my-service/*.go --port 3000
 ```
 
 ```bash
 pushd ./my-go-package/
 go build -mod=vendor cmd/my-service
+
 sudo env PATH="$PATH" \
-    serviceman add --cap-net-bind --system ./my-service --port 80
+    serviceman add --cap-net-bind --system \
+    ./my-service --port 80
 ```
 
 ### And even bash!
@@ -56,11 +64,73 @@ sudo env PATH="$PATH" \
 sudo env PATH="$PATH" serviceman add bash ./backup.sh /mnt/data
 ```
 
+## 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
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated for serviceman. Edit as you wish, but leave this line. -->
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>Label</key>
+  <string>example-service</string>
+  <key>ProgramArguments</key>
+  <array>
+    <string>/Users/me/example-service/bin/example-command</string>
+    <string>start</string>
+  </array>
+
+  <key>RunAtLoad</key>
+  <true/>
+  <key>KeepAlive</key>
+  <true/>
+
+  <key>WorkingDirectory</key>
+  <string>/Users/me/example-service</string>
+
+  <key>StandardErrorPath</key>
+  <string>/Users/me/.local/share/example-service/var/log/example-service.log</string>
+  <key>StandardOutPath</key>
+  <string>/Users/me/.local/share/example-service/var/log/example-service.log</string>
+</dict>
+</plist>
+```
+
 ### Use `--dryrun` to see the generated launcher config:
 
 ```bash
 sudo env PATH="$PATH" \
-    serviceman add --dryrun bash ./backup.sh /mnt/data
+    serviceman add --system --dryrun \
+    bash ./backup.sh /mnt/data
 ```
 
 ### See the (sub)command help