任务 在函数服务中特指通过异步模式响应请求,基于 非 WebServer 模式 执行的一次性脚本任务。本文为您介绍开发任务需要遵循的规范和方法。
开发任务时需要遵循以下规范:
启动命令
任务默认通过 函数配置 中的启动命令执行,允许在提交任务时自定义启动命令。
监听端口
任务通过非 WebServer 模式执行,无需在服务中监听端口,通过启动命令指定任务需要执行的命令或任务脚本即可。
数据库/存储挂载
函数服务本身是无状态的,服务启动不依赖本地内存 Cache 或落盘的数据。如需状态可将其存储至远端 Redis 或 MySQL 数据库,或者挂载 NAS、 TOS 等远端存储(详情请参见 挂载 NAS 文件存储、 挂载 TOS 对象存储)。
磁盘限制
任务实例可写的最大临时存储空间(/tmp
目录)为 512 MB,如果超过该限制可能引发实例驱逐,如需使用请注意限制使用大小,或者自行实现文件的清理或 rotate 逻辑。
对于复杂的任务,您可以在项目中提供一个启动脚本,后续配置启动命令时指定该启动脚本即可。以下是一个简单的任务脚本示例:
#!/bin/bash # 指定脚本使用 bash 解释器(用户可按需自行指定) # 设置严格的错误处理选项(用户可按需自行指定): # -E:使 ERR trap 在函数和子 shell 中生效 # -e:当命令返回非零状态时退出脚本 # -u:使用未定义的变量时视为错误 # -o pipefail:管道中任何命令失败时,整个管道返回非零状态 set -Eeuo pipefail # 将工作目录切换至当前脚本所在的目录 cd "$(dirname "$0")" # 日志打印任务开始时间 echo "Script started at $(date)" # 打印当前目录内容 ls # 此处模拟一个简单的任务:sleep 10s echo "Simulating task: Sleeping for 10 seconds" sleep 10 # 日志打印任务结束时间 echo "Script done at $(date)"
注意
启动脚本必须具有相应的可执行权限。否则任务会失败,出现 permission denied 报错。可参考以下命令给 Linux 系统所有的用户组添加脚本的执行权限。
# 需要在本地打包代码或制作自定义镜像时执行该命令(函数服务提供的默认模板中,对应的 run.sh 脚本已添加可执行权限,无需用户额外操作) # 假设启动脚本为 run.sh chmod a+x run.sh
注意
使用自定义镜像方式部署时,请确保所提供的镜像内置了对应的 Shell。代码包方式部署可忽略,函数服务平台提供的镜像默认包含 sh 和 bash shell 解释器。
# 在自定镜像容器中执行如下指令,可以查看当前系统支持的 shell cat /etc/shells # 执行上述命令后,终端会显示类似以下内容,即您的镜像可用的 shell 列表: /bin/sh /bin/bash /bin/rbash /bin/dash