我在 Ubuntu 15.04 上,刚刚安装了vsftpd
。当我运行命令时service vsftpd status
,我得到以下输出:
vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2015-10-09 19:18:50 IST; 3min 11s ago
Process: 2981 ExecStart=/usr/sbin/vsftpd /etc/vsftpd.conf (code=exited, status=2)
Process: 2979 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
Main PID: 2981 (code=exited, status=2)
Oct 09 19:18:50 harshal-Lenovo-B40-70 systemd[1]: Starting vsftpd FTP server...
Oct 09 19:18:50 harshal-Lenovo-B40-70 systemd[1]: Started vsftpd FTP server.
Oct 09 19:18:50 harshal-Lenovo-B40-70 systemd[1]: vsftpd.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Oct 09 19:18:50 harshal-Lenovo-B40-70 systemd[1]: Unit vsftpd.service entered failed state.
Oct 09 19:18:50 harshal-Lenovo-B40-70 systemd[1]: vsftpd.service failed.
我检查了一下/etc/vsftpd.conf
,它确实存在,而且我没有发现任何问题。我该如何解决这个问题?
答案1
我在尝试在 Ubuntu 16.04 上启动 vsftpd 时遇到了同样的问题。在我的情况下,只需注释掉以下行即可/etc/vsftpd.conf
:
listen_ipv6=YES
我不知道为什么我不能使用 ipv6,但是我不需要 IP-v6,禁用它可以解决我的问题。
答案2
步骤 1:检查 vsftpd.conf
listen=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
步骤 2:查看正在运行的 ftp 服务
$ lsof -i | grep ftp
步骤 3:停止 xinetd
$ sudo service xinetd stop
步骤 4:停止 xinetd 后,输入以下命令重新启动 vsftpd 服务
$ /etc/init.d/vsftpd restart
答案3
除了其他一些解决方案(listen_ipv6=NO
和listen=YES
)之外,我的解决方案也出现了同样的错误,因为我在修改的内容后添加了注释:
listen_ipv6=NO # modified
这也导致了同样的status=2/INVALIDARGUMENT
错误。只能通过直接运行守护进程来解决问题:
$ sudo /usr/sbin/vsftpd /etc/vsftpd.conf
500 OOPS: bad bool value in config file for: listen_ipv6
systemctl/service 和 /var/log/vsftpd.log 都没有任何用处。
解决方案是删除尾随的注释:
listen_ipv6=NO
答案4
这些解决方案对我都不起作用。我甚至禁用了 SELinux,所以这不是原因,并且 vsftpd 的配置文件 100% 完美,因为它可以service vstfpd start
立即工作,但它不会在启动时启动。
我的最终解决方案是这个 bash 脚本,它与 cron 一起运行,不断检查服务,现在运行正常,并通过检查并查看服务是否已停止然后启动它来在启动时启动 vsftp。
#!/bin/bash
service=vsftpd
if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then
echo "$service is running!!!"
else
service vsftpd start
fi
然后我的 cron 是
* * * * * sudo /usr/sbin/startvsftpd.sh