我刚从Ubuntu服务器14升级到版本15。升级后,我在让我的upstart脚本正常工作方面遇到了困难,并且了解到systemd是新的默认选项。我离Linux专家还有很大距离,所以请对我温柔点 :-)
以下是我之前的upstart脚本内容:
根据upstart to systemd wiki page,我使用那里提供的表格尽可能地将事物映射到我的新systemd服务文件中。
这个文件位于
这个工作得很好。然而,当我退出 SSH 会话时,该服务就会关闭。而且它不会在启动或用户登录时自动启动。我希望它的行为与作为 upstart 服务时相同:即在启动时开始运行,持续运行,并作为特定用户运行。
我需要做什么来获得这个配置?
以下是我之前的upstart脚本内容:
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 to systemd wiki page,我使用那里提供的表格尽可能地将事物映射到我的新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 会话时,该服务就会关闭。而且它不会在启动或用户登录时自动启动。我希望它的行为与作为 upstart 服务时相同:即在启动时开始运行,持续运行,并作为特定用户运行。
我需要做什么来获得这个配置?
systemctl enable
命令中,我必须指定服务文件的绝对路径,这一点起初并不明显。此外,启用时出现了一个关于缺少[Install]
部分的警告。我忽略了它,但我不确定它是否会影响服务在启动时的能力。 - void.pointerWantedBy=multi-user.target
,它将无法在启动时启动。在.service
文件中添加这个之后,你才能够进行enable
操作。 - void.pointer[Install]
部分缺失的信息。希望现在对寻找答案的任何人都更有帮助了。 - Yamahosomething@.service
的格式定义了一个文件名,然后像something@username.service
一样被enable
,设置变成了User=%i
,意味着用户不是硬编码的,多个用户可以使用相同的定义。一个例子。 - Walf/etc/systemd/user/
下面,它会启动吗? - Khurshid Alam/usr/local/lib/systemd/system
目录下,并且你可以使用systemctl enable [service]
命令将它们链接到/etc/systemd/system
目录中。你不应该直接将文件放在/etc/systemd/system
目录下。请参考man systemd
,在DIRECTORIES部分查看相关信息。 - fbicknel/etc/systemd/user/
是系统管理员放置系统范围用户单元的位置。"(并不一定有普遍真实性...我只是希望以最直接的方式为自己完成) - some bits flippedrobert
来说,在他们的~/.config/systemd/user/nzbget.service
位置上有一个名为nzbget.service
的用户服务是可以的。然后,robert
可以使用systemctl --user enable nzbget
来启用此服务。 - Abdull