【问题标题】:sh: 0: getcwd() failed: No such file or directory from exec commandsh: 0: getcwd() failed: no such file or directory from exec command
【发布时间】:2015-06-16 11:11:54
【问题描述】:

我有一个使用 Gearman 服务器在后台运行一些代码的 php 服务器。 命令行 php 脚本在后台运行。在中间,有一个服务器(walker)一直在运行并监听一些事件。当我监听某个特定事件时,它会使用 php exec ("some command") 触发另一个命令行命令。

如果这个服务器是新的,那么它工作正常,但几个小时后它开始给出:

sh: 0: getcwd() failed: No such file or directory  

我们在哪里使用 exec();

关于如何防止这种情况的任何想法?

【问题讨论】:

    标签: php linux bash


    【解决方案1】:

    此错误表明getcwd() 返回了NULL,而errno 设置为ENOENT

    如果当前工作目录未链接,getcwd() 将返回 ENOENT。这里似乎就是这种情况(根据手册页,这是导致getcwd() 返回ENOENT 的唯一条件)。

    仔细检查以确保在服务器运行时没有人删除目录,或者服务器代码本身没有在当前工作目录上调用unlink()。有人在某处删除它。

    作为一种好的做法,通常建议将守护进程chdir() 发送到守护进程将执行其职责的已知目录。这正是为了避免此类问题(也因为在单独的文件系统中运行的守护进程可能会阻止管理员卸载该文件系统)。

    【讨论】:

    • 我们在服务器上有 git 实现,每次有人提交或推送新代码时部署,可能 git 正在删除所有旧文件并添加新文件?
    • @AmitRana 也许吧。您可以尝试跟踪使用strace() 或类似工具运行的进程,以查看它正在调用哪些系统调用。
    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2019-10-25
    • 2021-11-16
    • 2023-04-03
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多