для
systemd
юнит:
$ systemctl --user cat test.service
# /home/admin/.config/systemd/user/test.service
[Unit]
After=local-fs.target network.target
[Service]
Type=simple
ExecStart=/home/admin/code/go/bin/test
Restart=on-failure
RestartSec=60
TimeoutSec=60
[Install]
WantedBy=default.target
After - после каких сервисов или их групп запускать юнит. В данном случае запускать не раньше чем будет смонтированна локальная файловая система и доступна сеть.
RestartSec - сколько секунд ждать между перезапуском
юнит-сервиса(по умолчанию 100мс).
TimeoutSec - сколько секунд ждать обработки start/stop запроса по истечении которых считать что
процесс завершился с ошибкой (программа не успела поднятся/остановится за отведённое ей время).
автозагрузка и запуск:
$ systemctl --user enable test.service
$ systemctl --user start test.service
статус:
$ systemctl --no-pager --full --user status test.service
перезагрузка systemd для поиска новых или изменённых юнитов:
$ systemctl --user daemon-reload
проделывается после изменения описания юнитов в процессе их работы, об этом также будет выведено сообщение(в конце) при описании статуса изменённого сервиса.
перезапуск web-сервера(после перекомпиляции):
$ systemctl --user restart test.service
здесь
test.service(юнит-сервис) и
test(веб-сервер на go) принадлежат пользователю
admin (/home/
admin/.config/systemd/user/test.service). В бщем кому принадлежит и кто может работать с
юнит-сервисом я уже
писал в одном из постов.
п.с.
если пользователь находится на сервере то скорее всего вам еще понадобится перевести его статус в
linger, то есть чтобы он всегда подымался при старте системы(как и root):
# loginctl enable-linger <username>