This commit is contained in:
Ryan Burnette 2019-08-04 01:36:46 +00:00 committed by AJ ONeal
parent 94c00a777d
commit 76710d58fa
4 changed files with 34 additions and 4 deletions

View File

@ -35,6 +35,7 @@ Also, I wanted a reasonable way to install [Telebit](https://telebit.io) on Wind
- node - node
- python - python
- ruby - ruby
- path
- Logging - Logging
- Debugging - Debugging
- Windows - Windows
@ -398,6 +399,25 @@ See **Using with scripts** for more detailed information.
</details> </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 ## Hints
- If something goes wrong, read the output **completely** - it'll probably be helpful - If something goes wrong, read the output **completely** - it'll probably be helpful

View File

@ -22,9 +22,6 @@ Wants=network-online.target systemd-networkd-wait-online.service
{{ end -}} {{ end -}}
[Service] [Service]
{{ if .Path -}}
PATH={{ .Path }}
{{ end -}}
# Restart on crash (bad signal), but not on 'clean' failure (error exit code) # Restart on crash (bad signal), but not on 'clean' failure (error exit code)
# Allow up to 3 restarts within 10 seconds # Allow up to 3 restarts within 10 seconds
# (it's unlikely that a user or properly-running script will do this) # (it's unlikely that a user or properly-running script will do this)
@ -38,6 +35,9 @@ User={{ .User }}
Group={{ .Group }} Group={{ .Group }}
{{ end -}} {{ end -}}
{{- if .Envs }}
Environment="{{- range $key, $value := .Envs }}{{ $key }}={{ $value }};{{- end }}"
{{- end }}
{{ if .Workdir -}} {{ if .Workdir -}}
WorkingDirectory={{ .Workdir }} WorkingDirectory={{ .Workdir }}
{{ end -}} {{ end -}}

View File

@ -78,6 +78,11 @@ func Start(conf *service.Service) error {
if "" != conf.Workdir { if "" != conf.Workdir {
cmd.Dir = 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() err = cmd.Start()
if nil != err { if nil != err {
fmt.Fprintf(lf, "[%s] Could not start %q process: %s\n", time.Now(), conf.Name, err) fmt.Fprintf(lf, "[%s] Could not start %q process: %s\n", time.Now(), conf.Name, err)

View File

@ -70,6 +70,7 @@ func add() {
forUser := false forUser := false
forSystem := false forSystem := false
dryrun := false dryrun := false
pathEnv := ""
flag.StringVar(&conf.Title, "title", "", "a human-friendly name for the service") 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.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)") 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(&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(&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.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.User, "username", "", "run the service as this user")
flag.StringVar(&conf.Group, "groupname", "", "run the service as this group") 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") 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, fmt.Sprintf(" --name %s", conf.Name))
ass = append(ass, "") ass = append(ass, "")
} }
if "" != pathEnv {
conf.Envs = make(map[string]string)
conf.Envs["PATH"] = pathEnv
}
exepath, err := findExec(flagargs[0], force) exepath, err := findExec(flagargs[0], force)
if nil != err { if nil != err {