我的问题有两个部分。
systemctl 脚本中的 @ 符号有什么意义?
如何在 Fedora 16 中启动 vsftpd(在一些教程中,它的名称似乎包含 @)?我已按照教程中说的做了所有操作,但仍然出现错误。 http://blog.tuxforge.com/fedora-16-vsftpd/
我做了什么
systemctl enable [email protected]
我所看到的
Failed to issue method call: No such file or directory
(我也尝试过使用绝对路径,但检查后发现没有这样的文件。真正的文件不包含 @ 符号,位于 /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)
答案1
该@
符号代表特殊服务,套接字和其他可运行多个实例的单元。
例如,[email protected]
是提供文本登录终端的服务。当您按Ctrl++Alt时F2,[email protected]
将启动并创建虚拟终端 #2。
另一个使用此功能的服务是 OpenVPN。您可以创建一个文件/etc/openvpn/work.conf
,配置为连接到您工作场所的 VPN,然后连接到它。同样,如果您家里有 VPN,您可以创建,然后启动。这样您就不必为每个连接的 VPN创建一个文件。systemctl start [email protected]
/etc/openvpn/home.conf
[email protected]
.service
但不要轻信我的话。试试看!让我们创建一个向 syslog 输出消息的简单服务。创建一个包含以下内容的文件:/etc/systemd/system/[email protected]
[Unit]
Description=Echo '%I'
[Service]
Type=oneshot
ExecStart=/bin/echo %i
StandardOutput=syslog
请注意,当服务启动时,%i
systemd 会用符号后面的内容填充 ? 。因此,尝试启动:@
[email protected]
systemctl start [email protected]
然后,检查杂志:
journalctl -n10
在底部,你会看到 systemd 正在运行/bin/echo foo
:
Feb 24 12:41:01 localhost echo[8412]: foo
现在,尝试一下。这一次,systemd 将填充,因此您将看到:systemctl start [email protected]
%i
bar
Feb 24 12:42:51 localhost echo[8432]: bar
就这些!任何东西都可能跟在@
符号后面,因为 systemd 只是%i
在服务定义中用它替换。OpenVPN 使用它进行配置,其他服务可能使用它来做其他事情,比如端口号。
有关详细信息,请参阅For more information, seeman systemd.unit
。