You need to enable JavaScript to run this app.
导航
开发方法(任务)
最近更新时间:2024.10.22 15:05:47首次发布时间:2024.10.22 15:05:47

任务 在函数服务中特指通过异步模式响应请求,基于 非 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