以下是我通过*.nix
生成的cabal2nix
文件的Keter分支:https://github.com/bsima/keter/tree/nix
我在我的开发机器上做了nix-build shell.nix
(NixOS 17.09),然后使用nix-copy-closure
将它放在我的数字海洋VPS(也是NixOS 17.09,通过nix-infect)上。
我创建了一个系统服务,它启动得很好,但是在尝试为服务器分叉进程后Keter死了:
2018-02-03 19:34:03.21: Data.Conduit.Process.Unix.monitorProcess: /opt/keter/temp/pprjam-0/dist/bin/pprjam: createProcess: runInteractiveProcess: exec: does not exist (No such file or directory)
找不到exec
,我认为coreutils
应该是coreutils
的一部分。我怀疑environment.systemPackages
是否遗失,但万一我将其放入我的$PATH
并重建,但它仍然无效。
因此,我认为这是一个$PATH
问题,或this issue(我不太明白,所以我认为它更可能是default.nix
问题)。
为了帮助它在目标机器的exec
上找到$PATH
,我是否需要在Keter test
中做些什么?我还缺少什么?
答案 0 :(得分:1)
exec
实际上是一个内置的shell,而不是coreutils
命令。实际上createProcess错误消息令人困惑。无法找到的命令名在createProcess:
之前。所以问题不是pprjam
找不到exec
(作为命令),而createProcess
检测到失败的exec
系统调用。
您的服务器上似乎缺少/opt/keter/temp/pprjam-0/dist/bin/pprjam
,或者运行时链接程序找不到pprjam
的依赖项。如果是后者,您可以通过扩展Keter服务的LD_LIBRARY_PATH
环境变量来修复它。