当我运行一个简单地将目录从一个地方复制到另一个地方的剧本时,ansible 会抛出
错误!一名工人被发现死亡
错误。经过一番谷歌搜索,看起来这是由 oom-killer 杀死 ansible 进程引起的(但我不确定是否如此)。我的记忆是:
total used free shared buff/cache available
Mem: 991 372 448 1 170 467
Swap: 511 365 146
我不知道该如何修复它。我应该提到,当我第一次执行剧本时,我只有 RAM,由于内存不足,剧本无法运行。之后,我添加了交换。不确定这是否相关,但请注意,这是一个交换文件,而不是单独的分区。
我在运行时观察了内存,发现一旦运行该任务,空闲交换就会迅速减少。当它达到 0 时,就会抛出错误消息。
我正在运行以下剧本。
---
- hosts: localhost
become: true
become_method: sudo
become_user: root
vars:
portals:
- mysite
contentPath: "/var/www/"
backupPath: "/home/dataFiles/backups/"
tasks:
- name: backup content
copy:
src: "{{ contentPath }}/{{ item }}"
dest: "{{backupPath}}/{{ item }}/{{ ansible_date_time.date }}/"
with_items:
- "{{ portals }}"
...
上面给出的错误是我从 ansible 获得的唯一信息。即使详细运行剧本也不会提供任何额外信息。
答案1
答案2
这解决了我的问题:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
答案3
类似这样的方法对我有用:
env no_proxy='*' ansible-playbook collect-facts.yml
您还可以添加export no_proxy="*"
到您的.bashrc
或.zshrc
,这样您就不需要每次都输入它。
更多详细信息:https://www.whatan00b.com/posts/debugging-a-segfault-from-ansible/
(信用:https://github.com/ansible/ansible/issues/32554#issuecomment-572985680)
答案4
我遇到了同样的错误,但我没有在任何任务中使用复制模块。
就我而言,问题是机器(出现错误时正在运行 ansible 任务)内存不足。
我通过启动剧本来检查它,然后在另一个终端启动htop
并监视剧本执行过程中 RAM 和 SWAP 是如何填充的。
我通过增加出现故障的机器的 RAM 解决了这个问题。
(增加 SWAP 的效果不会那么好,因为它不是随机存取存储器而是磁盘存储器,所以 1GB SWAP 提供的“计算能力”远低于 1GB RAM 提供的计算能力。)