通过 systemd target 启动 vsftpd 实例

通过 systemd target 启动 vsftpd 实例

用过的:

# cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core)

# systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN

# vsftpd -v
vsftpd: version 3.0.2

创建了两个配置文件:

/etc/vsftpd/other21.conf

...
listen=YES
listen_ipv6=NO
listen_port=21
...

/etc/vsftpd/another20021.conf

...
listen=YES
listen_ipv6=NO
listen_port=20021
...

还保留了一个默认配置文件:

/etc/vsftpd/vsftpd.conf

这些 systemd 单元已激活:

# systemctl enable [email protected]
Created symlink from /etc/systemd/system/vsftpd.target.wants/[email protected] to /usr/lib/systemd/system/[email protected].

# systemctl enable [email protected]
Created symlink from /etc/systemd/system/vsftpd.target.wants/[email protected] to /usr/lib/systemd/system/[email protected].

# systemctl enable vsftpd.target

执行时:

# systemctl start vsftpd.target

实例vsftpd@another20021运行正常。

但是vsftpd@other21没有启动。出于某种原因,它运行了default带配置的实例(在端口上21,不允许vsftpd@other21启动)。

# ps x|grep ftp
  608 ?        Ss     0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
27390 ?        Ss     0:00 /usr/sbin/vsftpd /etc/vsftpd/another20021.conf

vsftpd-3.0.2-21.el7.x86_64.rpm 中的单元文件和生成器的内容未受影响:

/usr/lib/systemd/system/[email protected]

[Unit]
Description=Vsftpd ftp daemon
After=network.target
PartOf=vsftpd.target

[Service]
Type=forking
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/%i.conf

[Install]
WantedBy=vsftpd.target

/usr/lib/systemd/system/vsftpd.target

[Unit]
Description=FTP daemon
After=network.target

[Install]
WantedBy=multi-user.target

/usr/lib/systemd/system/vsftpd.service

[Unit]
Description=Vsftpd ftp daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

[Install]
WantedBy=multi-user.target

/usr/lib/systemd/system-generators/vsftpd-generator

#!/bin/bash

confdir=/etc/vsftpd
unitdir=/usr/lib/systemd/system
targetdir=$1/vsftpd.target.wants

mkdir -p ${targetdir}

for f in $(ls -1 ${confdir}/*.conf | awk -F "." '{print $1}' | awk -F "/" '{print $4}')
do
  echo "Generating systemd units for $f"
  ln -s ${unitdir}/vsftpd\@.service ${targetdir}/vsftpd\@$f.service > /dev/null 2>&1
done

exit 0

激活单位:

# find /etc/systemd -name 'vsftpd*'
/etc/systemd/system/multi-user.target.wants/vsftpd.target
/etc/systemd/system/vsftpd.target.wants
/etc/systemd/system/vsftpd.target.wants/[email protected]
/etc/systemd/system/vsftpd.target.wants/[email protected]

为什么/etc/vsftpd/vsftpd.conf会被触发?

[email protected]另外,还应该在 systemd 单元文件中进行哪些更改vsftpd.target

答案1

为什么触发/etc/vsftpd/vsftpd.conf?

发生这种情况是因为您没有停止安装软件包时创建和启动的初始 vsftpd.service。要停止和禁用此服务,您需要运行以下命令:

# systemctl stop vsftpd.service

进而

# systemctl disable vsftpd.service

执行完这些命令后,原来的 vsftpd 会释放占用的端口和配置文件。然后你就可以启动第二个服务器实例了。

为了启动,还需要在 systemd 单元文件中进行哪些更改 [电子邮件保护]通过 vsftpd.target?

那里没有其他需要更改的地方。您指出的一切都是正确的。

--->

附言:我发现这个问题是六年前提出的,很可能不再相关。但也许我的回答会帮助那些由于粗心大意而遇到同样问题的人:)

---<

相关内容