【问题标题】:running a php script using ansible throws errors使用 ansible 运行 php 脚本会引发错误
【发布时间】:2016-08-03 16:03:14
【问题描述】:

我正在尝试使用 ansible 在远程服务器上运行 php 脚本。 使用 ansible 用户(ansible 用于登录服务器)运行脚本可以完美运行。但是,当我的 php 脚本中有 include 语句时,ansible 任务会失败。

我的 php 脚本位于

/srv/project

它试图包含

包含/someLibrary.php
以具有正确访问权限的任何用户身份运行脚本但通过 ansible 任务运行脚本时,一切正常 - 名称:运行脚本 外壳:'php /srv/project/script.php'

它失败了:

打开流失败:/srv/project/includes/someLibrary.php 中没有这样的文件或目录

不过,运行一个非常基本的 php 脚本效果很好。

【问题讨论】:

  • 文件是否存在于/srv/project/includes/someLibrary.php中?
  • 是的。手动执行脚本时也能正常工作。
  • 文件的文件权限是什么?
  • rwxrwx--- 用于 www-data 用户和组。 ansible 用户是 www-data 组的成员。
  • 你剪掉了太多细节。在我看来,文件 someLibrary.php 似乎已包含在内,并且该文件 inside 存在一些 I/O 错误 - 错误应该说明类似 failed to open stream: No such file or directory in /srv/project/includes/someLibrary.php on line 31 的内容 - 检查那行代码。跨度>

标签: php shell include ansible


【解决方案1】:

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

我的 ansible 任务现在如下所示:

- 名称:运行脚本 外壳:'php /srv/project/script.php' 参数: chdir: '/srv/项目'

感谢大家的帮助!

【讨论】:

【解决方案2】:

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

【讨论】:

  • 感谢您的建议。通过 ssh 登录和通过 ansible 连接时,我检查了 envvars。事实证明,它们几乎相同,但有一些细微差别。不过,没有什么会导致我的问题。
  • 这里有一个针对此类问题的故障排除清单:stackoverflow.com/questions/36577020/…
猜你喜欢
  • 1970-01-01
  • 2015-11-05
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 2016-03-29
相关资源
最近更新 更多