nohup在OS X Yosmite上无法工作 - 出现错误“无法从控制台分离,没有这个文件或目录”。

12

我使用nohup在php应用程序中运行命令(我有一个网页向php服务器发送POST请求以在后台启动shell脚本)。

就像下面这样:

exec('nohup /home/user/test.sh > /home/user/test.log 2>&1 &')

在我使用OS X Snow Leopard(OS X 10.6)时,这个命令很好用。然而,最近我将我的MAC升级到了OS X Yosemite(OS X 10.10),现在它不再起作用了。

在test.log中,我总是收到这条消息:nohup无法从控制台分离:没有这样的文件或目录

如果我直接在bash中运行相同的命令,它可以正常工作。我做了很多搜索,但似乎找不到任何有用的信息来解决这个问题。我只看到了一个关于Jenkins的讨论,他们似乎也遇到了类似的问题。

有人知道为什么它在Yosemite上开始失败吗?任何建议都将不胜感激。


也许你应该去 http://apple.stackexchange.com/ 上问这个问题。 - Jeen Broekstra
我也在运行Yosemite,我检查了一下 - nohup在我的电脑上运行良好,我尝试以相同的方式调用它。但是你为什么需要它呢?为什么不只是执行('/bin/sh /home/user/test.sh > /home/user/test.log 2>&1 &')?nohup所做的就是忽略SIGHUP信号,但我猜你根本没有使用任何信号。后台模式是通过符号'&'触发的,而不是通过nohup。 - Denis Mysenko
谢谢。是的,我去掉了nohup,现在它可以正常工作了。但以防万一,在将来如果我需要使用它,那么它可能会让我很痛苦......这个问题对我来说真的很奇怪。 - weilan
我在我的Yosemite系统中遇到了同样的问题。这个问题已经解决了吗? - amrk7
很遗憾,没有什么幸运的解决方案。只需删除 nohup 命令即可让它运行。 - weilan
3个回答

24

你正在使用tmux吗?我刚遇到过这个问题,没有使用tmux启动一个新的终端,就可以正常工作。

请参见此tmux问题解释为什么会出现这种情况,这是OS X中的一个怪癖。https://github.com/tmux/tmux/issues/443


3
你知道为什么tmux会引起这个问题吗? - Jiacai Liu
你能详细说明一下吗? - Sibidharan

1

当我从ssh登录运行命令时,我的Mac mini遇到了类似的问题,错误信息如下:

nohup: can't detach from console: Undefined error: 0

我通过移除"nohup"并重定向标准输入来解决了这个问题,最终成功运行并在"exit"后继续运行的命令如下:

my_command < /dev/null > /dev/null 2> error.txt &

抱歉,由于文本处理的原因,示例命令被破坏了,命令看起来像:<command> < /dev/null > /dev/null 2> error.txt & - Arthur Stephens

0
这个问题发生在从10.11.6 -> 10.12.6 版本的 nohup 和 screen 中。解决方法是在 /etc/ssh/sshd_config 文件中启用 UsePAM 功能。我们发现,在通过 ssh 连接并执行 su - $USER 命令后,nohup 可以正常工作。在尝试其他版本的 sshd 并尝试启用密码认证时,我们发现设置 UsePAM yes 可以解决问题(更改 sshd 版本无法帮助)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接