Starting zabbix_agentd: No such file or directory

本文介绍了解决 Zabbix Agent 启动失败的问题,具体表现为启动时提示找不到文件或目录。通过调整配置文件中 BASEDIR 的路径指向正确的 zabbix_agentd 所在目录,成功解决了启动失败的问题。

问题描述

[root@localhost admin]# service zabbix_agentd restart Shutting down zabbix_agentd: [FAILED] Starting zabbix_agentd:  /etc/init.d/functions: line 546: /usr/local/zabbix/zabbix/sbin/zabbix_agentd: No such file or directory
                                                       [FAILED]

通过提示发现目录错误,正确启动目录为:

/usr/local/zabbix/sbin/zabbix_agentd

解决:

1.进入zabbix_agentd配置文件

vim /etc/init.d/zabbix_agentd

2.修改BASEDIR选项

BASEDIR=/usr/local/zabbix
--- - name: 部署Zabbix Agent (CentOS7) hosts: all become: yes become_user: root become_method: sudo vars: zabbix_version: "6.2.9" zabbix_server_ip: "{{ zabbix_server | default('192.168.16.40') }}" zabbix_agent_port: "10050" # 敏感信息建议用ansible-vault加密存储 monitor_user: "monitor" monitor_password: "123456" # 生产环境需用ansible-vault加密 zabbix_install_prefix: "/usr/local/zabbix" # 使用相对路径,符合Ansible文件结构规范 local_zabbix_source: "/zabbix/zabbix-{{ zabbix_version }}.tar.gz" zabbix_agent_template: "/zabbix/zabbix_agentd.conf.j2" zabbix_init_script: "/zabbix/zabbix_agentd" tasks: # 1. 系统准备 - name: 安装基础仓库和工具 yum: name: - epel-release - yum-utils - wget state: present update_cache: yes - name: 启用必要系统仓库 command: yum-config-manager --enable base updates extras changed_when: false # 2. 创建管理用户 - name: 创建monitor用户 user: name: "{{ monitor_user }}" password: "{{ monitor_password | password_hash('sha512') }}" # 密码哈希化 shell: /bin/bash create_home: yes state: present groups: wheel # 加入wheel组便于 append: yes # 3. 安装依赖包(解决包依赖问题) - name: 安装编译和运行依赖 yum: name: # 系统工具 - gcc - make - automake - libtool # Zabbix依赖 - net-snmp - net-snmp-devel - curl-devel - java-1.8.0-openjdk - java-1.8.0-openjdk-devel - libevent - libevent-devel - mysql-devel # 硬件监控相关(通过EPEL仓库获取) - libssh2-devel state: present update_cache: yes register: yum_result retries: 3 delay: 5 until: yum_result is succeeded # 失败重试机制 # 4. 创建Zabbix运行用户 - name: 创建zabbix系统用户 user: name: zabbix shell: /sbin/nologin system: yes state: present create_home: no # 5. 上传并处理安装包 - name: 检查本地安装包是否存在 delegate_to: 192.168.16.11 stat: path: "{{ local_zabbix_source }}" register: zabbix_package failed_when: not zabbix_package.stat.exists # 本地包不存在则失败 - name: 上传Zabbix安装包 copy: src: "{{ local_zabbix_source }}" dest: "/zabbix/zabbix-{{ zabbix_version }}.tar.gz" owner: "{{ monitor_user }}" group: "{{ monitor_user }}" mode: '0644' vars: ansible_user: "{{ monitor_user }}" ansible_password: "{{ monitor_password }}" - name: 解压Zabbix源码 unarchive: src: "/tmp/zabbix-{{ zabbix_version }}.tar.gz" dest: "/usr/local/src/" remote_src: yes owner: root group: root creates: "/usr/local/src/zabbix-{{ zabbix_version }}" # 已存在则跳过 # 6. 编译安装 - name: 配置编译环境 shell: | export CFLAGS="-std=gnu99" ./configure --prefix={{ zabbix_install_prefix }} --enable-agent args: chdir: "/usr/local/src/zabbix-{{ zabbix_version }}" creates: "/usr/local/src/zabbix-{{ zabbix_version }}/Makefile" # 避免重复配置 - name: 编译安装Zabbix Agent make: chdir: "/usr/local/src/zabbix-{{ zabbix_version }}/" target: install register: make_result retries: 2 delay: 3 until: make_result is succeeded # 7. 权限配置 - name: 设置Zabbix目录权限 file: path: "{{ item }}" state: directory owner: zabbix group: zabbix mode: '0755' recurse: yes # 递归设置子目录 loop: - "{{ zabbix_install_prefix }}/etc" - "{{ zabbix_install_prefix }}/etc/zabbix_agentd.conf.d" - "{{ zabbix_install_prefix }}/scripts" - name: 创建系统命令链接 file: src: "{{ zabbix_install_prefix }}/{{ item.src }}" dest: "/usr/local/{{ item.dest }}/{{ item.src | basename }}" state: link force: yes # 存在旧链接则覆盖 loop: - { src: "bin/zabbix_get", dest: "bin" } - { src: "bin/zabbix_sender", dest: "bin" } - { src: "sbin/zabbix_agentd", dest: "sbin" } # 8. 配置Agent - name: 检查模板文件是否存在 delegate_to: 192.168.16.11 stat: path: "{{ zabbix_agent_template }}" register: template_file failed_when: not template_file.stat.exists - name: 生成Zabbix Agent配置文件 template: src: "{{ zabbix_agent_template }}" dest: "{{ zabbix_install_prefix }}/etc/zabbix_agentd.conf" owner: zabbix group: zabbix mode: '0644' validate: "{{ zabbix_install_prefix }}/sbin/zabbix_agentd -c %s -t agent.ping" # 配置验证 notify: 重启Zabbix Agent # 9. 服务管理配置 - name: 检查启动脚本是否存在 delegate_to: 192.168.16.11 stat: path: "{{ zabbix_init_script }}" register: init_file failed_when: not init_file.stat.exists - name: 部署启动脚本 copy: src: "{{ zabbix_init_script }}" dest: "/etc/init.d/zabbix_agentd" mode: '0755' owner: root group: root notify: 重启Zabbix Agent - name: 配置sudo权限(安全限制) lineinfile: path: /etc/sudoers.d/zabbix create: yes line: "{{ monitor_user }} ALL=(root) NOPASSWD: /etc/init.d/zabbix_agentd start, /etc/init.d/zabbix_agentd stop, /etc/init.d/zabbix_agentd restart, /etc/init.d/zabbix_agentd status" validate: 'visudo -cf %s' mode: '0440' # sudoers文件安全权限 # 10. 防火墙配置 - name: 开放Zabbix Agent端口 firewalld: port: "{{ zabbix_agent_port }}/tcp" permanent: yes immediate: yes state: enabled when: ansible_facts['services']['firewalld.service']['state'] == 'running' - name: 临时关闭SELinux(如需永久关闭请修改/etc/selinux/config) command: setenforce 0 when: ansible_facts['selinux']['status'] == 'enabled' changed_when: false # 11. 启动并验证服务 - name: 启动Zabbix Agent服务 service: name: zabbix_agentd enabled: yes state: started - name: 验证服务是否启动 command: pgrep zabbix_agentd register: agent_process failed_when: agent_process.rc != 0 changed_when: false - name: 验证端口监听 wait_for: port: "{{ zabbix_agent_port }}" state: started timeout: 10 host: 0.0.0.0 handlers: - name: 重启Zabbix Agent service: name: zabbix_agentd state: restarted jumpserver:192.168.16.11 优化修改
09-01
以下是对在 CentOS 7 系统上使用 Ansible 远程从跳板机 192.168.16.11 部署 Zabbix Agent 6.2.9 的 Playbook 的优化修改: ```yaml --- - name: 部署Zabbix Agent (CentOS7) hosts: all become: yes become_user: root become_method: sudo gather_facts: yes # 确保收集事实信息 vars: zabbix_version: "6.2.9" zabbix_server_ip: "{{ zabbix_server | default('192.168.16.40') }}" zabbix_agent_port: "10050" monitor_user: "monitor" monitor_password: "123456" # 生产环境需用ansible-vault加密 zabbix_install_prefix: "/usr/local/zabbix" local_zabbix_source: "/zabbix/zabbix-{{ zabbix_version }}.tar.gz" zabbix_agent_template: "/zabbix/zabbix_agentd.conf.j2" zabbix_init_script: "/zabbix/zabbix_agentd" ansible_ssh_common_args: '-o StrictHostKeyChecking=no' # 跳过 SSH 密钥检查 tasks: # 1. 系统准备 - name: 安装基础仓库和工具 yum: name: - epel-release - yum-utils - wget state: present update_cache: yes - name: 启用必要系统仓库 command: yum-config-manager --enable base updates extras changed_when: false # 2. 创建管理用户 - name: 创建monitor用户 user: name: "{{ monitor_user }}" password: "{{ monitor_password | password_hash('sha512') }}" shell: /bin/bash create_home: yes state: present groups: wheel append: yes # 3. 安装依赖包(解决包依赖问题) - name: 安装编译和运行依赖 yum: name: - gcc - make - automake - libtool - net-snmp - net-snmp-devel - curl-devel - java-1.8.0-openjdk - java-1.8.0-openjdk-devel - libevent - libevent-devel - mysql-devel - libssh2-devel state: present update_cache: yes register: yum_result retries: 3 delay: 5 until: yum_result is succeeded # 4. 创建Zabbix运行用户 - name: 创建zabbix系统用户 user: name: zabbix shell: /sbin/nologin system: yes state: present create_home: no # 5. 上传并处理安装包 - name: 检查本地安装包是否存在 delegate_to: 192.168.16.11 stat: path: "{{ local_zabbix_source }}" register: zabbix_package failed_when: not zabbix_package.stat.exists - name: 上传Zabbix安装包 copy: src: "{{ local_zabbix_source }}" dest: "/tmp/zabbix-{{ zabbix_version }}.tar.gz" owner: "{{ monitor_user }}" group: "{{ monitor_user }}" mode: '0644' vars: ansible_user: "{{ monitor_user }}" ansible_password: "{{ monitor_password }}" - name: 解压Zabbix源码 unarchive: src: "/tmp/zabbix-{{ zabbix_version }}.tar.gz" dest: "/usr/local/src/" remote_src: yes owner: root group: root creates: "/usr/local/src/zabbix-{{ zabbix_version }}" # 6. 编译安装 - name: 配置编译环境 shell: | export CFLAGS="-std=gnu99" ./configure --prefix={{ zabbix_install_prefix }} --enable-agent args: chdir: "/usr/local/src/zabbix-{{ zabbix_version }}" creates: "/usr/local/src/zabbix-{{ zabbix_version }}/Makefile" - name: 编译安装Zabbix Agent make: chdir: "/usr/local/src/zabbix-{{ zabbix_version }}/" target: install register: make_result retries: 2 delay: 3 until: make_result is succeeded # 7. 权限配置 - name: 设置Zabbix目录权限 file: path: "{{ item }}" state: directory owner: zabbix group: zabbix mode: '0755' recurse: yes loop: - "{{ zabbix_install_prefix }}/etc" - "{{ zabbix_install_prefix }}/etc/zabbix_agentd.conf.d" - "{{ zabbix_install_prefix }}/scripts" - name: 创建系统命令链接 file: src: "{{ zabbix_install_prefix }}/{{ item.src }}" dest: "/usr/local/{{ item.dest }}/{{ item.src | basename }}" state: link force: yes loop: - { src: "bin/zabbix_get", dest: "bin" } - { src: "bin/zabbix_sender", dest: "bin" } - { src: "sbin/zabbix_agentd", dest: "sbin" } # 8. 配置Agent - name: 检查模板文件是否存在 delegate_to: 192.168.16.11 stat: path: "{{ zabbix_agent_template }}" register: template_file failed_when: not template_file.stat.exists - name: 生成Zabbix Agent配置文件 template: src: "{{ zabbix_agent_template }}" dest: "{{ zabbix_install_prefix }}/etc/zabbix_agentd.conf" owner: zabbix group: zabbix mode: '0644' validate: "{{ zabbix_install_prefix }}/sbin/zabbix_agentd -c %s -t agent.ping" notify: 重启Zabbix Agent # 9. 服务管理配置 - name: 检查启动脚本是否存在 delegate_to: 192.168.16.11 stat: path: "{{ zabbix_init_script }}" register: init_file failed_when: not init_file.stat.exists - name: 部署启动脚本 copy: src: "{{ zabbix_init_script }}" dest: "/etc/init.d/zabbix_agentd" mode: '0755' owner: root group: root notify: 重启Zabbix Agent - name: 配置sudo权限(安全限制) lineinfile: path: /etc/sudoers.d/zabbix create: yes line: "{{ monitor_user }} ALL=(root) NOPASSWD: /etc/init.d/zabbix_agentd start, /etc/init.d/zabbix_agentd stop, /etc/init.d/zabbix_agentd restart, /etc/init.d/zabbix_agentd status" validate: 'visudo -cf %s' mode: '0440' # 10. 防火墙配置 - name: 开放Zabbix Agent端口 firewalld: port: "{{ zabbix_agent_port }}/tcp" permanent: yes immediate: yes state: enabled when: ansible_facts['services']['firewalld.service']['state'] == 'running' - name: 临时关闭SELinux(如需永久关闭请修改/etc/selinux/config) command: setenforce 0 when: ansible_facts['selinux']['status'] == 'enabled' changed_when: false # 11. 启动并验证服务 - name: 启动Zabbix Agent服务 service: name: zabbix_agentd enabled: yes state: started - name: 验证服务是否启动 command: pgrep zabbix_agentd register: agent_process failed_when: agent_process.rc != 0 changed_when: false - name: 验证端口监听 wait_for: port: "{{ zabbix_agent_port }}" state: started timeout: 10 host: 0.0.0.0 handlers: - name: 重启Zabbix Agent service: name: zabbix_agentd state: restarted ``` ### 优化点说明 1. **添加 `gather_facts: yes`**:确保收集目标主机的事实信息,以便后续任务可以使用这些信息。 2. **添加 `ansible_ssh_common_args`**:跳过 SSH 密钥检查,避免手动确认密钥的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值