Назад | Перейти на главную страницу

Запуск экземпляров vsftpd по цели systemd

Используемый:

# 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 vsftpd@other21.service
Created symlink from /etc/systemd/system/vsftpd.target.wants/vsftpd@other21.service to /usr/lib/systemd/system/vsftpd@.service.

# systemctl enable vsftpd@another20021.service
Created symlink from /etc/systemd/system/vsftpd.target.wants/vsftpd@another20021.service to /usr/lib/systemd/system/vsftpd@.service.

# systemctl enable vsftpd.target

И при исполнении:

# systemctl start vsftpd.target

Пример vsftpd@another20021 работает нормально.

Но vsftpd@other21 не запускается. Вместо этого почему-то запускается экземпляр с default config (на порт 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/vsftpd@.service

[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/vsftpd@another20021.service
/etc/systemd/system/vsftpd.target.wants/vsftpd@other21.service

Зачем /etc/vsftpd/vsftpd.conf срабатывает?

Что нужно поменять в юнит-файлах systemd дополнительно для запуска vsftpd@other21.service по vsftpd.target?