@ 符号和 systemctl 和 vsftpd

rub*_*buc 35 vsftpd systemd

我有一个两部分的问题。

  1. systemctl 脚本中@ 符号的意义是什么?

  2. 如何在 Fedora 16 中启动 vsftpd(在某些教程中,它的名称中似乎包含一个 @)?我已经完成了教程所说的一切,但它仍然给我一个错误。 http://blog.tuxforge.com/fedora-16-vsftpd/

我所做的

systemctl enable vsftpd@.service
Run Code Online (Sandbox Code Playgroud)

我所看到的

Failed to issue method call: No such file or directory
Run Code Online (Sandbox Code Playgroud)

(我也用绝对路径试过,我检查后没有这样的文件。真正的文件不包含@符号,位于/lib/systemd/system/目录下。我也试过使用和不使用@ 符号启动和启用,启用有效,但启动没有。我意识到这篇文章现在已经过时,但我似乎仍然无法启动服务。当我尝试连接时,它不允许我)

编辑:我让服务以某种方式启动,但我仍然想知道 @ 符号在某些服务名称中的含义。此外,我仍然收到登录错误编号 #500 无法更改目录 [...],这是什么意思?

要开始它,我只是输入

sudo systemctl enable vsftpd.service

sudo systemctl start vsftpd.service (the problem was I was using an absolute path for this I think)
Run Code Online (Sandbox Code Playgroud)

Pat*_*hes 65

@符号用于特殊服务、套接字和其他可以运行多个实例的单元。

例如,getty@.service是提供文本登录终端的服务。当您按Ctrl+ Alt+ 时F2getty@tty2.service将启动,创建虚拟终端 #2。

使用此功能的另一项服务是 OpenVPN。您可以创建一个文件/etc/openvpn/work.conf,配置为连接到您工作场所的 VPN,然后systemctl start openvpn@work.service连接到它。同样,如果您家里有 VPN ,您可以创建/etc/openvpn/home.conf,然后开始openvpn@home.service。这可以防止您必须为.service您连接的每个 VPN创建一个文件。

但不要相信我的话。试试看!让我们创建一个向 syslog 输出消息的简单服务。创建一个/etc/systemd/system/echo@.service包含以下内容的文件:

[Unit]
Description=Echo '%I'

[Service]
Type=oneshot
ExecStart=/bin/echo %i
StandardOutput=syslog
Run Code Online (Sandbox Code Playgroud)

注意%i? systemd 将@在服务启动时用符号后面的内容填充它。所以,尝试开始echo@foo.service

systemctl start echo@foo.service
Run Code Online (Sandbox Code Playgroud)

然后,检查日志

 journalctl -n10
Run Code Online (Sandbox Code Playgroud)

在底部,您会看到 systemd 运行/bin/echo foo

Feb 24 12:41:01 localhost echo[8412]: foo
Run Code Online (Sandbox Code Playgroud)

现在,尝试systemctl start echo@bar.service。这一次,systemd将填充%ibar,所以你会看到:

Feb 24 12:42:51 localhost echo[8432]: bar
Run Code Online (Sandbox Code Playgroud)

这里的所有都是它的!任何东西都可能跟随@符号,因为 systemd 只是%i在服务定义中用它替换。OpenVPN 将其用于配置,其他服务可能用于其他用途,例如端口号。

有关更多信息,请参阅man systemd.unit