我刚刚从 Ubuntu 服务器 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
Run Code Online (Sandbox Code Playgroud)
基于systemd wiki 页面的暴发户,我使用那里提供的表格在我的新 systemd 服务文件中尽可能地映射事物:
[Unit]
Description=NZBGet Service
[Service]
Type=forking
ExecStart=/usr/local/bin/nzbget -D
ExecStop=/usr/local/bin/nzbget -Q
Restart=on-failure
Run Code Online (Sandbox Code Playgroud)
该文件位于/home/robert/.config/systemd/user/nzbget.service
. 要手动启动服务,我一直在做:
$ systemctl --user start nzbget
Run Code Online (Sandbox Code Playgroud)
这很好用。但是,当我退出 SSH 会话时,该服务将关闭。此外,它不会在启动或用户登录时启动。我希望它的行为与作为新贵服务的行为相同:我希望它在启动时启动,不断运行,并作为特定用户。
我需要做什么才能获得此配置?
Yam*_*aho 254
您可以在单元文件的部分中指定指令User=
和。Group=
[Service]
要使服务在启动时运行,您不应将它放在您的主文件夹中。相反,将它放在/etc/systemd/system/
. 这是系统管理员(即您)用来添加新的系统范围服务的文件夹。
其他文件夹包括:
/usr/lib/systemd/system/
用于要安装单元文件的包,尽管在 Debian 和 Ubuntu 下,该文件夹实际上是/lib/systemd/system/
因为各种bin
和lib
文件夹尚未合并为统一/usr/
前缀。/usr/local/lib/systemd/system/
用于通过本地编译的包安装单元。一旦单元文件位于适当的位置,您可以systemctl start <UNIT_FILENAME>
像往常一样通过键入立即尝试启动单元。它应该可以工作,而无需键入单元的完整路径。如果扩展名是.service
.
在启用您的单元之前,您需要添加一个[Install]
部分,您应该在该部分下添加指令WantedBy=multi-user.target
。该指令指定启动过程的阶段,在该阶段应该启动服务(如果已启用)。multi-user.target
适用于大多数服务。
添加该信息后,您可以使用systemctl enable <UNIT_FILENAME>
,它启用该单元,使 systemd 从现在开始在指定阶段的启动过程中自动启动它。
归档时间: |
|
查看次数: |
394993 次 |
最近记录: |