pueue升级到0.4.0迁移数据

3 篇文章 0 订阅
2 篇文章 0 订阅

pueue升级到0.4.0迁移数据

关于pueue

pueue是一个命令行任务管理工具,pueue并不是类似于ps的管理系统所有任务的管理工具,而是用于安排执行长时间运行任务的工具,pueue可以管理这些任务的执行顺序,并跟踪这些长时间运行任务的状态和输出结果。

简而言之,pueue是一个shell命令队列的管理工具,名字pueue即来源于queue队列,最重要的是,有很多便利功能和抽象管理功能。

pueue以守护进程方式运行,因此并没有绑定到任何终端,因此可以在同一台计算机上的任何终端控制任务。即使关闭所有的ssh会话,队列仍旧被连续处理。

pueue主要的功能包括:

  • 计划要执行的命令时可以指定命令执行的工作目录
  • 可以方便的查看命令的输出内容
  • 可以和正在运行的进程交互
  • 当需要释放计算机的处理能力时,可以随时暂停/恢复任务
  • 可以方便的操作已安排的任务顺序
  • 可以同时并行运行多个任务,还可以指定希望同时并行运行的任务数
  • 所有功能支持LinuxMacOSWindows上支持部分功能

pueue 0.4.0版本说明

pueue于2020年5月5日发布0.4.0版本,包括:

新特性

  • 添加--after [ids]选项。当任务设置该选项时,仅当指定的依赖任务全部成功执行后才会执行,反之,当依赖任务失败时,任务也将失败。
  • 添加新状态FailedToStart。当无法开始任务时,任务为此状态。
  • 添加新状态DependencyFailed。当任务的任何依赖任务失败时,任务为此状态。
  • 添加新的配置选项read_local_logs。默认值为true。默认情况下,假定守护进程和客户端运行在同一台设备。当客户端可以直接读取日志文件时,毋需通过套接字发送日志。可以按照实际情况设置为false,例如将pueuessh端口转发结合使用。

改进

  • 进程输出日志不再永久保存在内存中,在日志输出大量内容时,将显著减少内容使用。
  • 处理从磁盘读取日志输出时在内存中压缩,这将减少带宽和内存的使用量。

变化

  • pueue不再将日志输出存储在其备份文件中。

pueue 0.4.0 数据迁移

虽然pueue 0.4.0版本说明中并没有直接阐述数据迁移问题,不过升级后需要迁移数据才能正常运行。需要迁移的状态文件在

~/.local/share/pueue/state.json

备份pueue状态文件

cp ~/.local/share/pueue/state.json ~/.local/share/pueue/state.bak.json

添加read_local_logs设置

运行pueue

pueued -vvv

如果看到如下报错

[ERROR] Failed to deserialize previous state log: Error("missing field `read_local_logs`", line: 1, column: 91)

说明状态文件缺少read_local_logs,也就是新特性中新增的配置选项read_local_logs

数据迁移方式为

jq '.settings.client.read_local_logs = true' ~/.local/share/pueue/state.bak.json > ~/.local/share/pueue/state.json

添加dependencies字段

运行pueue

pueued -vvv

如果看到如下报错

[ERROR] Failed to deserialize previous state log: Error("missing field `dependencies`", line: 31, column: 5)

说明状态文件缺少任务之间的依赖关系dependencies,也就是新特性中新增的--after [ids]选项。

在前面脚本基础上增加数据迁移方式为

jq '.settings.client.read_local_logs = true' ~/.local/share/pueue/state.bak.json |
jq '.|(.tasks[].dependencies=[])' > ~/.local/share/pueue/state.json

其中第二行用于添加dependencies设置。

更新Failed

运行pueue

pueued -vvv

如果看到如下报错

[ERROR] Failed to deserialize previous state log: Error("unknown variant `Failed`, expected one of `Queued`, `Stashed`, `Running`, `Paused`, `Done`, `Locked`", line: 8004, column: 24)

这是因为升级后任务没有了Failed状态,取而代之的是Done状态,并增加result字段,其中包含Failed字段,值为错误代码。

在前面脚本基础上增加数据迁移方式为

jq '.settings.client.read_local_logs = true' ~/.local/share/pueue/state.bak.json |
jq '.|(.tasks[].dependencies=[])' |
jq '.tasks[]|=if .status == "Failed" then (.|(.result = {"Failed": .exit_code})|(.status = "Done")) else . end' > ~/.local/share/pueue/state.json

其中第三行用于更新Failed的值。

更新Done

运行pueue

pueued -vvv

如果看到如下报错

thread 'main' panicked at 'Got a 'Done' task without a task result. Please report this bug.', client/output.rs:108:25
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace 

这是因为升级后当任务状态为Done时,需要包含result字段,值为Success

在前面脚本基础上增加数据迁移方式为

jq '.settings.client.read_local_logs = true' ~/.local/share/pueue/state.bak.json |
jq '.|(.tasks[].dependencies=[])' |
jq '.tasks[]|=if .status == "Done" then (.|(.result = "Success")) else . end' |
jq '.tasks[]|=if .status == "Failed" then (.|(.result = {"Failed": .exit_code})|(.status = "Done")) else . end' > ~/.local/share/pueue/state.json

注意,更新脚本插入在第三行,因为更新Failed值时把status字段设置为了Done.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值