不小心安装了CentOS 7(说多了都是泪呀,各种不适应),不过随遇而安吧(PS:不要用既来之则安之,不懂的可以百度。),装完系统后想跑个Vsftpd,
yum -y install vsftpd
坐等安装完毕(用的手机2G流量那个心塞)。
启动vstfpd:
service start vsftpd (这条命令现在已经不管用了,)
/etc/init.d/vsftd start (想都不用想,就没有这个脚本)
这可怎么办?当然是systemctl了,这个命令在今后的版本里非常有用需要熟练掌握。
马上来
systemctl list-unit-files |grep vsftpd.service
发现vsftpd.service服务果然是关闭的如下:
vsftpd.service disabled
没错,就是disable,然后启动该服务
systemctl start vsftp.service
马上来
systemctl list-unit-files |grep vsftpd.service
发现vsftpd.service服务竟然是关闭的如下:
vsftpd.service disabled
是不是感觉当头一棒。
网上给了几个解决方法莫过于关闭端口和重启进程其实都不能解决这个问题,
所有才有了这篇文章:单独说开启这个服务没啥意思,我们分析一下原理
1>查看一下进程状态
[root@localhost ~]# systemctl status vsftpd.service
vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
Active: active (running) since 一 2015-10-19 23:37:06 CST; 11min ago
Main PID: 23165 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─23165 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
10月 19 23:37:06 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.
10月 19 23:37:33 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.
10月 19 23:38:39 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon
这里注释一下命令(毕竟每个人都是从小白过来的嘛,不要歧视小白):
vsftpd.service - Vsftpd ftp daemon(开启服务就要开启daemo,我到现在都弄不明白这两 个有啥区别,反正书上就这么说的)
然后是Loaded(加载)/usr/lib/systemd/system/vsftpd.service,并且失败,这里标记一下 待会说。
然后是进程号和配置文件路径,不解释。
最先三条是日志记录尝试启动vsftp ftp daemon(如果不理解daemo就干脆理解为服务,个人观 点,不接受高手吐槽)。
看完了这个咱们再看看日志,CentOS 7 上面没了syslog,没错,是没了,呵呵,替代品 是journalctl,至于这个命令不解释,自己可以去百度,这里只需要知道使用(journalctl -xn)就好,信息如下:
10月 19 23:37:06 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.
-- Subject: Unit vsftpd.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit vsftpd.service has finished starting up.
--
-- The start-up result is done.
解释一下:
启动daemon(没错我就是个夜猫子,)
vsftpd.service 被终止启动,系统做出判断(翻译比较粗糙凑合看吧,原谅我这英语四级都没 过的人),
然后是启动结果是已经启动了(启动了,没启动起来,也不报个错“囧”)
然后让去、http://lists.freedesktop.org/mailman/listinfo/systemd-devel寻求帮助,
哈哈到这里大家应该已经能看明白哪里出问题了,如果您没看出来不要紧,往下看
没错就是vsftpd.service的daemon启动不起来,系统还提示了个systemd-devel,我们马不停蹄 去看看vsftpd.service的daemon(也是上文的那个小尾巴,就是查看这里)
cat /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]
不用担心这个也肯定没问题,我就是想让你来看看daemon文件,可以修改ExecStart的内容,当 然没人像我这么无聊,不过如果你想让别人找不到你的配置文件就很好用啦,自定义让他们找 不到。
daemon没问题,那还会什么有问题呀,那就是runlevel了,马上输入
chkconfig --list vsftpd
注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原 生 systemd 配置覆盖。
如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。
欲查看对特定 target 启用的服务请执行
'systemctl list-dependencies [target]'。
(我启用了中文。)
看来使要使用systemctl list-unit-files来查看,走起
systemctl list-unit-files | grep vsftpd.service
这不又回到原点了嘛,依旧是:
vsftpd.service disabled
好吧,实在是没办法,那我们只好跑到这个runlevel下面看看究竟是出了什么问题,还有就是 这个systemctl究竟是何方神圣。
ll /etc/systemd/system/multi-user.target.wants
总用量 0
lrwxrwxrwx. 1 root root 35 10月 17 18:07 atd.service -> /usr/lib/systemd/system/atd.service
lrwxrwxrwx. 1 root root 38 9月 25 12:54 auditd.service -> /usr/lib/systemd/system/auditd.service
lrwxrwxrwx. 1 root root 37 9月 25 12:50 crond.service -> /usr/lib/systemd/system/crond.service
lrwxrwxrwx. 1 root root 42 9月 25 12:52 irqbalance.service -> /usr/lib/systemd/system/irqbalance.service
lrwxrwxrwx. 1 root root 46 9月 25 12:51 NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root 40 9月 25 12:49 remote-fs.target -> /usr/lib/systemd/system/remote-fs.target
lrwxrwxrwx. 1 root root 39 9月 25 12:52 rsyslog.service -> /usr/lib/systemd/system/rsyslog.service
lrwxrwxrwx. 1 root root 40 10月 17 01:37 sendmail.service -> /usr/lib/systemd/system/sendmail.service
lrwxrwxrwx. 1 root root 41 10月 17 01:37 sm-client.service -> /usr/lib/systemd/system/sm-client.service
lrwxrwxrwx. 1 root root 36 9月 25 12:55 sshd.service -> /usr/lib/systemd/system/sshd.service
lrwxrwxrwx. 1 root root 37 9月 25 12:55 tuned.service -> /usr/lib/systemd/system/tuned.service
果然发现问题了,systemctl通过调用该文件下的软连接来实现该service是否被启动,当然本 文描述的vsftpd.service的软连接,所以无法启动,细心的读者一定发现了,这个软连接连接的就是 这个服务的daemon了,发现问题后,问题就容易解决了,
1> cd /etc/systemd/system/multi-user.target.wants
然后添加
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'
手动创建一个连接
2>大家也许会嫌麻烦,那有没有更简单的办法呀,答案也是有的,就是:
systemctl enable vsftpd.service
然后查看
systemctl list-unit-files | grep vsftpd.service
服务是不是起来了:
vsftpd.service enabled
备注:虽然大家只是命令输错了。本文的目的是希望大家能学会分析问题,而不是做伸手党,以上就是我解决该问题的步骤,有不足之处欢迎指正,
原文:https://blog.51cto.com/mubsky/1704380