请问一下,今天刚部署golang的fc函数,按照教程写了个demo,上传了包含二进制的文件夹,为什么运行一直卡住呢,没有任何输出结果,异步队列的任务也是执行超时。
报了这个错误,function not ready:timed out after 30000 millis.:/code/main: 1: /code/main: MZ @ : not found
/code/main: 1: /code/main: Syntax error: Unterminated quoted string
请问是什么情况
根据您提供的信息,可能有以下几种情况导致函数无法正常执行:
函数代码存在语法错误:根据报错信息中的“Syntax error: Unterminated quoted string”,函数代码中可能存在缺失引号的语法错误。建议检查一下函数代码,确认语法是否正确。
函数文件不可执行:根据报错信息中的“MZ @ : not found”,可能是因为上传的二进制文件没有设置执行权限,导致函数无法被运行。您可以尝试给上传的二进制文件添加执行权限,例如使用 chmod 命令进行修改。
函数运行环境配置不正确:如果函数依赖于特定的运行环境,那么可能需要对该环境进行配置和调整。您可以尝试在本地环境中测试函数代码,确认函数是否能够正常运行,并且了解所需的环境配置。
您上传的包含二进制文件的文件夹中可能包含不符合 fc 函数的规范要求的二进制文件,导致 fc 函数无法正常加载和执行您的代码。具体来说,错误提示报出了 “/code/main: MZ @ : not found/code/main: 1: /code/main: Syntax error: Unterminated quoted string” 两个错误,分别表示找不到 /code/main 文件和在 /code/main 文件的第一行之前有某个字符没有被正确地结束。
这个问题通常是由于在二进制文件中包含了 Windows 可执行文件(.exe)或 Mac 可执行文件(.app),或者使用了错误的编译器或参数,所以在 Linux 环境下无法正确解释它们。您可以使用 Go 语言的交叉编译功能生成适用于不同操作系统的二进制文件,或使用 Linux 环境下的编译器对 Go 代码进行编译,以保证生成的二进制文件可以在 Linux 环境下正确运行。
为了解决这个问题,您可以尝试以下步骤:
确认您的二进制文件和上传内容符合 fc 函数的规范要求,参考文档:https://help.aliyun.com/document_detail/54209.html
重新编译您的代码,并确保使用正确的编译器和参数。如果需要在多个操作系统上部署您的代码,可以使用 Go 的交叉编译功能,参考文档:https://golang.org/doc/install/source#environment。
确认您的代码中没有包含对其他库或依赖的引用,或者确保将这些依赖打包成一个单独的可执行文件。如果有依赖,可以使用 Go 的 Vendor 管理功能,参考文档:https://golang.org/cmd/go/#hdr-Vendor_Directories
如果您已经尝试了前面的方法还无法解决问题,建议使用 fc-docker 进行部署,默认情况下 fc-docker 环境提供了完整的运行库和依赖,以及常用的编译和调试工具。参考文档:https://help.aliyun.com/document_detail/159804.html
go执行的是二进制。 建议使用 custom runtime
此答案来自钉钉群“阿里函数计算官网客户”