语法
全局选项
参数:
RUNNABLE- 要执行的 Python 脚本文件或目录(除非使用了--kill、--kill-all、--reattach、--continue或--console之类的进程管理标志,否则必填)ARGS- 传给该脚本的额外参数
--kill/--kill-all 可选的信号: SIGINT、SIGQUIT、SIGABRT、SIGKILL、SIGUSR1、SIGUSR2、SIGTERM、SIGSTOP
基本用法
环境变量
设置变量
自动注入的变量
以下环境变量在您的脚本内部自动可用:文件下载
在脚本结束后,下载它生成的文件:--allow-overwrite,否则命令会失败。下载过程中会自动解压 gzip 压缩的文件。
分离模式
在后台运行脚本,不等待输出:- 只要 Box 接受了这个作业,命令就返回。它在脚本开始之前就返回,也在脚本所需的准备工作(解包模块目录、安装它的
requirements.txt)之前返回 - 不会把 stdout/stderr 回传
- 脚本继续在 Box 上运行
- 用
--reattach查看它的输出,之后用--kill停止它
requirements.txt 装不上。这类失败要通过作业本身看到,而不是在提示符处。
--reattach 会显示该失败并以非零码退出:
Box 'my-lager-box' is held for the detached run and released when it ends。较旧的 Box 在作业结束后仍保留该锁,此时 CLI 会打印
release with: lager boxes unlock --box my-lager-box。请参阅
锁定。
终止正在运行的脚本
--kill 接受分离启动时打印出的进程 ID。
端口转发
把 Box 上的网络端口转发到您的本机:SRC_PORT[:DST_PORT][/PROTOCOL]
超时
限制脚本的执行时间:- 默认值
0表示不限制。 - 前台运行被限制在 300 秒。更大的值只会运行 300 秒,Box 会把这个上限写入它的日志。
- 分离运行没有上限。只有当您给出数值时,Box 才会应用它。
- 先发送 SIGTERM。CLI 打印
Script terminated due to timeout.并以 124 退出 - 如果脚本在 5 秒内没有退出,再发送 SIGKILL。CLI 打印
Script forcibly killed due to timeout.并以 137 退出
结构化输出
运行在 Box 上的脚本可以用lager.core.output() 函数把结构化数据回传给 CLI。它使用独立于 stdout/stderr 的专用输出通道(文件描述符 3)。
Box 侧 API
结构化输出在到达时就会打印到 CLI 控制台。标准的 stdout 和 stderr 则实时单独串流。
模块 includes
如果您的脚本依赖本地模块,请在项目的.lager 文件中配置 includes。该文件是 JSON:
.lager 文件的。CLI 从脚本所在目录开始,沿目录树向上查找
.lager 文件,然后在上传到 Box 之前,把脚本连同全部 include 目录一起打包。
test.py 中:
额外文件
随脚本一起上传其他文件:退出码
Box 锁
lager python 在运行脚本时会获取 Box 锁,这样其他用户就不能同时驱动同一台 Box。请参阅锁定。
- 前台运行在脚本运行期间持有该锁,命令退出时释放它。
- 如果另一位用户持有该锁,命令在您的计算机上会立即失败;在 CI 中,它会等待该锁。
--kill、--kill-all、--reattach、--continue和--console不获取该锁。- 设置
LAGER_AUTO_LOCK_DISABLE=1可以在不加锁的情况下运行。
示例
硬件测试脚本示例
说明
- 脚本专用的配置值请用
--env - 来自当前 shell 的密钥或令牌请用
--passenv --download只在脚本结束后取回文件,而不是在运行过程中- 端口转发的语法是
SRC_PORT[:DST_PORT][/PROTOCOL] - 输出通过带保活(间隔 20 秒)的多路复用 HTTP 协议实时流式传输
安装 Python 包
脚本在 Box 上的 Lager Python 容器内运行。要安装脚本依赖的包,请用声明式的lager box-config pip 命令。这些命令把包记录到 Box 配置中,并重建容器。此后这些包会在多次 lager python 运行和 Box 更新之间保持存在。
独立的
lager pip 命令已被移除,并入了 lager box-config pip。
