Scheduler
设想您经营一家服装网店。当顾客买走最后一件商品时,这件商品的库存就变成 0。要想继续开卖,就得向供货商下订单。假设供货商有一个接收订单的窗口开在互联网上,只要访问约定好的地址,订单就会被受理。再假设您已经把“找出库存为 0 的商品并调用那个窗口”这件事做成了一个 Script。可即便如此,还剩一个问题:每天都需要有人去点一次那个 Script。
Scheduler 就替代了这个人。只要设定一次“每天在同一时刻运行这个 Script”,每到那个时刻,WEEGLOO 就会自动运行。谁都不用打开画面。
可以把它比作调好一个闹钟。只要设定一次几点响铃,之后每天到那个时刻它就会自动响起。本页以服装店的“库存补货”为例,来看看在 Scheduler 中要设定什么、时刻要怎么填写,以及它是以谁的权限来运行的。
要设定的三件事
一个 Scheduler 要设定的东西并不多。
- 名称:用于日后在列表中辨认它。例如
库存补货。 - 要执行的 Script:选择到时刻就运行的一个 Script。一个 Scheduler 只运行一个 Script。
- 何时运行:在下方 填写运行时间的方法 中介绍。
除此之外,还有一个开关。关掉它后,设定会照样保留,只是不再运行。像供货商休息的那段时间那样需要暂时停下时,不必删除它。
要执行的 Script 之后无法更换。 想运行别的 Script,就要新建一个 Scheduler。名称、时刻和开关随时都可以修改。
填写运行时间的方法
运行时间用五个部分来填写。从左到右依次是 分、时、日、月、星期,* 表示“全部”。
分 时 日 月 星期
0 9 * * * → 每天 9 点整常用的写法如下。
| 填写的值 | 何时运行 |
|---|---|
0 0 * * * | 每天 0 点整 |
30 9 * * * | 每天 9 点 30 分 |
0 * * * * | 每小时整点 |
*/10 * * * * | 每 10 分钟 |
0 0 * * 1 | 每周一 0 点整 |
0 0 1 * * | 每月 1 日 0 点整 |
时间以标准时间(UTC)来解读。 它不是本地时间,因此要按时差算好之后再填写。如果是比标准时间快 9 个小时的地区,那么当地的早上 9 点就是 0 0 * * *。库存补货就用这个值,也就是在标准时间 0 点运行。
含有日期或星期的时刻,这样的换算可能把日期也一并推移,所以请再确认一次。
一次都不会运行的值无法保存。 例如 0 0 30 2 * 指向 2 月 30 日,而这样的日子永远不会到来,所以试图保存时,会收到请您重新确认该值的响应。
以谁的权限运行
当 Scheduler 运行 Script 时,这次运行会被视为创建该 Scheduler 的人所执行的。库存补货 Script 读取商品、调用供货商,也都是以创建者的身份发生的。
因此,无论是创建还是修改,都需要同时具备两种权限。
- 角色(SpaceRole)中必须具备 Scheduler 的设置权限。
- 必须具备运行该 Scheduler 要执行的 Script 的权限。
第二种权限不仅在创建时确认,修改时也会确认。因为更改运行时刻,就是在决定何时执行那个 Script;把关闭的重新打开,就是在开始执行。
如果创建者之后失去了该权限,Scheduler 就会被关闭。 当负责人离开团队,或角色被收窄时,WEEGLOO 会在下一个运行时刻确认这一点,并在不运行的情况下关掉开关。即使权限恢复,开关也不会自动开启,因此需要您亲手重新开启。
查看执行记录
Scheduler 每运行一次,就会留下一条记录。那一次是成功还是失败,就记在这里。昨晚的订单是否真的发出去了,用这条记录来确认。
列表中会显示每一次的执行时间和结果。点击运行中失败的那一次,就能在详情画面的错误区域里原样看到失败的原因。 它会和耗费的时间一起显示,因此可以凭这段文字分辨出,是供货商窗口没有响应,还是别的问题。
成功的执行记录会在 1 小时后消失,失败的执行记录会在 3 天后消失。 失败的一方留得更久,是因为日后会去查看的正是那一方。如果是像订单明细那样需要保留更久的值,就在 Script 内把它保存为 Content。
即使失败,Scheduler 也不会停下。如果是因为供货商窗口一时没有响应而失败,那么只有那一次会被记为失败,到下一个时刻会再次运行。
与 Webhook 有何不同
两者相同之处在于,都无需人去点,就能运行 Script。不同之处在于,是什么在触发运行。
- Webhook 在有事情发生时运行。比如商品被上架时,内容被发布时。
- Scheduler 在到了时刻时运行。哪怕什么都没发生,也会每天在那个时刻运行。
库存补货乍看之下像是该用 Webhook。因为在库存变成 0 的那一刻下单就行了。可是,如果同一件商品的库存在一天之内先变成 0、又因退货而回升、然后再次变成 0,那么每一次都会发出订单。而如果每天汇总起来查看一遍,那么一件商品就只对应一份订单。需要“汇总后一次处理”而不是“每次发生就处理”的工作,正是 Scheduler 的用武之地。
反过来,在商品上架的那一刻填充说明这件事没有理由拖延,所以该用 Webhook。
需要了解的事项
- 数量有上限。 一个 Organization 能拥有的 Scheduler 数量按套餐分别设定(Free 1 个、Basic 5 个、Pro 30 个、Enterprise 无限制)。达到上限后就无法新建,删除不用的就会重新空出一个名额。
- 执行次数与 Script 共用。 Scheduler 所做的事就是运行 Script,因此每运行一次,就会用掉套餐中的一次 Script 执行次数。Scheduler 没有单独的上限。这个次数用完之后,此后到达运行时刻的 Scheduler 就不会运行而被关闭。这种情况下,为什么没能开始运行,会记录在执行记录中。即使到了下个月也不会自动开启,因此需要您亲手重新开启。
- 错过的运行不会补上。 即使因为维护等原因漏过了一天,第二天也不会运行两次。而是从下一个时刻起重新运行。
- 某个 Scheduler 使用的 Script 无法删除。 即使那个 Scheduler 已关闭,也一样。请先删除那个 Scheduler,再删除 Script。
在内容工作室中管理
Scheduler 在内容工作室的 Scheduler 画面中创建和管理。列表中会把创建好的 Scheduler 连同名称、要执行的 Script 的名称、cron 表达式、下次执行、状态、更新时间和更新者一起,每个显示为一行。

画面还会一并告诉您这两栏各自用的是哪个时钟。写有 cron 表达式那一栏的栏头会标上 UTC,下次执行 栏的栏头则会标上查看者所在的时区,比如 UTC±N。这样,保存的值以及它按您的时间是几点,就能在同一行里看到。在比标准时间慢的时区,下次执行 可能会显示为前一天。
新的 Scheduler 通过列表右上角的 创建 按钮来创建。
- 点击列表右上角的 创建 按钮。
- 在名称栏中输入
库存补货。 - 请开启 启用。关掉后虽然能保存,但不会运行。
- 在 要执行的 Script 中选择库存补货 Script。
- 在 执行周期 中选择 手动输入。
- 在五个部分中输入
0 0 * * *。 - 点击右上角的 创建 按钮进行保存。
画面还会当即显示您输入的表达式实际会在什么时候运行。它会提示手动输入的表达式以标准时间(UTC)保存,并一并显示将要保存的 cron 值和下次执行时刻的预览。

在列表中点击某一个 Scheduler,就会打开这个 Scheduler 的详情画面。详情画面分为 执行日志 和 设置 两个选项卡,初次打开时显示的是 执行日志。执行日志 选项卡中,至今运行过的每一次会显示为一行,每一行都会显示 执行时间、结果,以及指向这一次的 请求 ID。用 结果 栏可以只挑出成功的那些或只挑出失败的那些,点击 刷新日志 就会把刚刚运行的那一次也重新读取进来。

点击其中一次,就会打开这一次的详情。这里会显示 结果,以及 状态码、耗费的时间(耗时)、这一次是以谁的身份运行的(Run as),如果是失败的那一次,失败的原因就会原样显示在 错误 区域中。上方有一个徽章,标明这一次属于哪个 Scheduler、运行的是哪个 Script,旁边还有通往那个 Script 的链接,以及到 Script 那边的记录中查看同一次运行的 在 Script 日志中查看 链接。

