我正在尝试使用处理程序根据配置文件的更改重新启动 vsftpd 服务。我在 task/main.yaml 中有以下代码:
- name: copy vsftpd.conf
template: src=vsftpd.conf.j2 dest={{vsftpd_config_file}} backup=yes
become: yes
notify: restart vsftpd
tags: [ 'configuration', 'package', 'vsftpd' ]
在 handlers/main.yaml 中:
---
- name: restart vsftpd
service: name={{ vsftpd_service_name }} state=restarted
变量在 defaults/main.yaml 中定义如下:
vsftpd_config_file: '/etc/vsftpd/vsftpd.conf'
vsftpd_service_name: 'vsftpd'
当我运行剧本时,处理程序会被调用:
...
TASK [linux-vsftpd : copy vsftpd.conf] **********************************************************************************************************************
changed: [ftp_host]
...
RUNNING HANDLER [linux-vsftpd : restart vsftpd] *************************************************************************************************************
changed: [ftp_host]
但服务没有重新启动:
[elliott.barrere@ftp_host ~]$ ps aux | grep vsftpd
248003150 10437 0.0 0.0 103304 896 pts/0 S+ 14:23 0:00 grep vsftpd
root 51182 0.0 0.0 52120 852 ? Ss 12:25 0:01 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
我可以使用服务脚本和时间戳更新手动重新启动服务,就像我期望的那样:
[elliott.barrere@ftp_host ~]$ sudo service vsftpd restart
[sudo] password for elliott.barrere:
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[elliott.barrere@ftp_host ~]$ ps aux | grep vsftpd
root 38995 0.0 0.0 52120 852 ? Ss 14:23 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
248003150 46878 0.0 0.0 103300 884 pts/0 S+ 14:23 0:00 grep vsftpd
[elliott.barrere@ftp_host ~]$
知道为什么 Ansible 没有重新启动服务,或者更糟的是,为什么它没有报告故障吗?
答案1
啊,当我发布问题后,我立即意识到了我的问题:我的处理程序中缺少“成为:是”:
---
- name: restart vsftpd
become: yes
service: name={{ vsftpd_service_name }} state=restarted
添加该行可以解决问题并且 Ansible 能够重新启动该服务。
由于某种原因,当以非 root 用户身份运行时,vsftpd init 脚本似乎无法正常退出:
[elliott.barrere@ftp_host ~]$ service vsftpd restart
Shutting down vsftpd: [FAILED]
Starting vsftpd for vsftpd: 500 OOPS: config file not owned by correct user, or not a file
[FAILED]
[elliott.barrere@ftp_host ~]$ echo $?
0
因此这让追踪变得十分困难。