我运行ansible时遇到了一个非常奇怪的错误:
收集事实***************************************************** *************** 致命的:[i-0f55b6a4] =>不能使目录/$HOME/.ansible/cp:[错误13]权限被拒绝:'/ $ HOME' 任务:[任务1] ******************************************* ******************** 致命:没有主机匹配或所有主机已经失败 - 中止 玩回扣************************************************ ******************** 重试,使用:--limit @ / home / ubuntu / install.retry i-0f55b6a4:ok = 0改变= 0不可达= 1失败= 0
通常情况下,这个剧本运行没有问题,但我最近做了一些改变,以便调用ansible的程序从start-stop-daemon
调用,这样我就可以作为服务运行。 最终的目标是在有需要时能够自动运行剧本的服务。
剧本的开始是这样的:
--- - hosts: w_vm:main sudo: True tasks: - name: Task #1 ...
sudo设置为True,所以我有点确定错误不在目标机器上。
生成的剧本的调用看起来像这样:
ansible-playbook -i /tmp/ansible3397486563152037600.inventory \ /home/ubuntu/playbooks/main_playbook.yml \ -e @/home/ubuntu/extra_params.json
我不确定是否Could not make dir /$HOME/.ansible/cp
服务器或远程计算机上发生Could not make dir /$HOME/.ansible/cp
错误,或者为什么ansible会试图在/
创build一个名为$HOME
的目录。 这只发生在调用ansible的程序从linux服务中调用时,而不是从命令行显式调用的时候。
我在这里问了一个更具体的问题: https : //unix.stackexchange.com/questions/220841/start-stop-daemon-services-environment-variables-and-ansible
试试sudo chown -R YOUR_USERNAME /home/YOUR_USERNAME/.ansible
迟到,但可能对某人有用。 检查〜/ .ansible的所有权。 本地机器(运行有效/可控的控制器节点)中.ansible的所有权可能会导致问题。 做“chown -R username:groupname .ansible”(用户名:groupname应该是运行该剧本的用户)并且尝试再次运行剧本
作为一种选择,从控制器节点中删除这个.ansible目录并重新运行该剧本。
Ansible在本地机器和远程机器上的~/.ansible
.ansible中创建临时文件。 所以这在理论上可以从双方触发。
我的猜测是,在Ansible运行的本地机器上,Ansible如何启动不应该影响目标机器。 快速搜索显示, start-stop-deamon
没有可用的$HOME
(或任何env),但它有一个-e
选项可以根据您的需要进行设置。
如果-e
不可用,请参阅此答案 ,这建议另外执行/usr/bin/env
来设置环境变量。
我使用Jenkins遇到了类似的问题。 它有一个默认的$HOME
env var设置为/root/
。 解决方案是在运行时注入环境变量。
HOME=/path/to/your/users/home