使用ansible抛出错误来运行php脚本

时间:2016-08-02 15:58:45

标签: php shell include ansible

我正在尝试使用ansible在远程服务器上运行php脚本。 使用ansible用户(ansible用于登录服务器)运行脚本非常有效。然而,当我的php脚本中包含语句时,ansible任务失败了。

我的php脚本位于

/srv/project

它试图包含

includes/someLibrary.php
当任何具有正确访问权限但通过ansible任务运行的用户运行脚本时,一切正常

- name: run script
  shell: 'php /srv/project/script.php'

它失败了:

failed to open stream: No such file or directory in /srv/project/includes/someLibrary.php

运行一个非常基本的PHP脚本可以很好地工作。

2 个答案:

答案 0 :(得分:3)

我刚刚找到问题的解决方案。 问题是,当我手动执行脚本时,我连接到服务器并进入/srv/project目录,然后调用php script.php PHP include在这种情况下查看我想要包含的文件的当前目录。当ansible连接到服务器时,它不会更改目录,从而产生no such file or directory错误。对此的解决方案很简单,因为shell模块将chdir作为参数将目录更改为在运行命令之前指定的目录。

我的ansible任务现在看起来如下:

- name: run script
  shell: 'php /srv/project/script.php'
  args:
    chdir: '/srv/project'

感谢大家的帮助!

答案 1 :(得分:0)

Ansible在非交互式ssh会话下运行,因此不应用用户环境设置(例如.bashrc,.bash_profile)。这通常是交互式运行时不同行为的原因。通过Ansible检查交互式printenv和raw: printenv之间的区别,您可能会发现需要设置的内容(通过ansible task / play environment:块)来使事情正常工作。