我有一个两部分的问题。
systemctl 脚本中@ 符号的意义是什么?
如何在 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+ 时F2,getty@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将填充%i用bar,所以你会看到:
Feb 24 12:42:51 localhost echo[8432]: bar
Run Code Online (Sandbox Code Playgroud)
这里的所有都是它的!任何东西都可能跟随@符号,因为 systemd 只是%i在服务定义中用它替换。OpenVPN 将其用于配置,其他服务可能用于其他用途,例如端口号。
有关更多信息,请参阅man systemd.unit。
| 归档时间: |
|
| 查看次数: |
20868 次 |
| 最近记录: |