Browse Source

progress

tags/v0.6.0
parent
commit
76710d58fa
4 changed files with 34 additions and 4 deletions
  1. +20
    -0
      README.md
  2. +3
    -3
      manager/dist/etc/systemd/system/_name_.service.tmpl
  3. +5
    -0
      runner/runner.go
  4. +6
    -1
      serviceman.go

+ 20
- 0
README.md View File

@@ -35,6 +35,7 @@ Also, I wanted a reasonable way to install [Telebit](https://telebit.io) on Wind
- node
- python
- ruby
- path
- Logging
- Debugging
- Windows
@@ -398,6 +399,25 @@ See **Using with scripts** for more detailed information.

</details>

<details>
<summary>Setting $PATH</summary>

You can set the `$PATH` for your service like this:

```bash
sudo serviceman add ./myservice --path "/home/myuser/bin"
```

Snapshot your actual path like this:

```bash
sudo serviceman add ./myservice --path "$PATH"
```

Remember that this takes a snapshot and sets it in the configuration, it's not
a live reference to your path.
</details>

## Hints

- If something goes wrong, read the output **completely** - it'll probably be helpful


+ 3
- 3
manager/dist/etc/systemd/system/_name_.service.tmpl View File

@@ -22,9 +22,6 @@ Wants=network-online.target systemd-networkd-wait-online.service

{{ end -}}
[Service]
{{ if .Path -}}
PATH={{ .Path }}
{{ end -}}
# Restart on crash (bad signal), but not on 'clean' failure (error exit code)
# Allow up to 3 restarts within 10 seconds
# (it's unlikely that a user or properly-running script will do this)
@@ -38,6 +35,9 @@ User={{ .User }}
Group={{ .Group }}

{{ end -}}
{{- if .Envs }}
Environment="{{- range $key, $value := .Envs }}{{ $key }}={{ $value }};{{- end }}"
{{- end }}
{{ if .Workdir -}}
WorkingDirectory={{ .Workdir }}
{{ end -}}


+ 5
- 0
runner/runner.go View File

@@ -78,6 +78,11 @@ func Start(conf *service.Service) error {
if "" != conf.Workdir {
cmd.Dir = conf.Workdir
}
if len(conf.Envs) > 0 {
for k, v := range conf.Envs {
cmd.Env = append(cmd.Env, k+"="+v)
}
}
err = cmd.Start()
if nil != err {
fmt.Fprintf(lf, "[%s] Could not start %q process: %s\n", time.Now(), conf.Name, err)


+ 6
- 1
serviceman.go View File

@@ -70,6 +70,7 @@ func add() {
forUser := false
forSystem := false
dryrun := false
pathEnv := ""
flag.StringVar(&conf.Title, "title", "", "a human-friendly name for the service")
flag.StringVar(&conf.Desc, "desc", "", "a human-friendly description of the service (ex: Foo App)")
flag.StringVar(&conf.Name, "name", "", "a computer-friendly name for the service (ex: foo-app)")
@@ -79,7 +80,7 @@ func add() {
flag.BoolVar(&forSystem, "system", false, "attempt to add system service as an unprivileged/unelevated user")
flag.BoolVar(&forUser, "user", false, "add user space / user mode service even when admin/root/sudo/elevated")
flag.BoolVar(&force, "force", false, "if the interpreter or executable doesn't exist, or things don't make sense, try anyway")
flag.StringVar(&conf.Path, "path", "", "set the path for the resulting systemd service")
flag.StringVar(&pathEnv, "path", "", "set the path for the resulting systemd service")
flag.StringVar(&conf.User, "username", "", "run the service as this user")
flag.StringVar(&conf.Group, "groupname", "", "run the service as this group")
flag.BoolVar(&conf.PrivilegedPorts, "cap-net-bind", false, "this service should have access to privileged ports")
@@ -164,6 +165,10 @@ func add() {
ass = append(ass, fmt.Sprintf(" --name %s", conf.Name))
ass = append(ass, "")
}
if "" != pathEnv {
conf.Envs = make(map[string]string)
conf.Envs["PATH"] = pathEnv
}

exepath, err := findExec(flagargs[0], force)
if nil != err {


Loading…
Cancel
Save