Я только что обновил Ubuntu Server 14 до версии 15. У меня возникли проблемы с работой моего сценария upstart после обновления, и я прочитал, что systemd является новым значением по умолчанию. Я далеко не эксперт по Linux, поэтому, пожалуйста, будьте осторожны со мной :-)
Вот что мой сценарий выскочки был раньше:
description "NZBGet upstart script"
setuid robert
setgid robert
start on runlevel [2345]
stop on runlevel [016]
respawn
expect fork
script
exec nzbget -D
end script
pre-stop script
exec nzbget -Q
end script
Основываясь на вики-странице upstart для systemd , я использовал предоставленные там таблицы, чтобы как можно точнее отобразить вещи в моем новом файле службы systemd:
[Unit]
Description=NZBGet Service
[Service]
Type=forking
ExecStart=/usr/local/bin/nzbget -D
ExecStop=/usr/local/bin/nzbget -Q
Restart=on-failure
Этот файл находится по адресу /home/robert/.config/systemd/user/nzbget.service
. Чтобы запустить сервис вручную, я делаю:
$ systemctl --user start nzbget
Это прекрасно работает. Однако, когда я выхожу из сеанса SSH, служба отключается. Кроме того, он не запускается при загрузке или входе пользователя в систему. Я хочу, чтобы он вел себя так же, как и сервис выскочки: я хочу, чтобы он запускался при загрузке, работал постоянно и как конкретный пользователь.
Что мне нужно сделать, чтобы получить эту конфигурацию?
systemctl enable
команде, хотя, это не было очевидно для меня сначала. Также включение дало мне предупреждение о пропаже[Install]
раздела. Я проигнорировал это, но я не уверен, повлияет ли это на его способность запускаться во время загрузки.Install
Предупреждение было на самом деле очень важно. Он не запускается при загрузке безWantedBy=multi-user.target
под[Install]
секцией. После добавления этого в.service
файл, то вы можетеenable
его.[Install]
разделе. Надеюсь, теперь это более полезно для тех, кто ищет это.something@.service
затемenable
хотелиsomething@username.service
настройки становитсяUser=%i
означает , что пользователь не жестко закодированы и несколько пользователей могут использовать такое же определение. Пример./etc/systemd/user/
?Возможно, вам будет интересно использовать функциональность systemd "задержка пользователя". Это включено через
loginctl enable-linger USERNAME
.Это приводит к тому, что для соответствующего пользователя, запускаемого при загрузке, запускается отдельный диспетчер служб, поэтому ваши пользовательские блоки
~/.config/systemd/user
будут выбраны и обработаны во время загрузки и завершения работы в соответствии с конфигурацией вашей службы.Вы также можете использовать
systemctl --user
для управления и настройки службы (сервисов), которая будет работать на менеджере сервисов вашего пользователя, а не на системе.источник
systemctl --user
это фантастическая находка. Спасибо!systemctl --user
, похоже, не работает для сессий SSH.