bluesky队列服务器命令行工具
CLI 工具随 bluesky-queueserver包一起安装:
- start-re-manager - 启动RE管理器。
- qserver - 通过0MQ与RE管理器通信。
- qserver-list-plans-devices - 生成现有计划与设备列表,并验证启动代码。
- qserver-zmq-keys - 生成用于加密0MQ控制通道的密钥对。
- qserver-console-monitor - 简单监控RE管理器的控制台输出。
- qserver-clear-lock - 若锁密钥丢失,解锁RE管理器。
- qserver-console - 启动Jupyter Console,连接到工作进程中运行的IPython内核。
- qserver-qtconsole - 启动Jupyter Qt Console,连接到工作进程中运行的 IPython 内核。
start-re-manager
该命令会在工作站上启动运行引擎(RE)管理器。如果未指定任何参数,RE管理器将以演示模式启动(将使用内置的启动文件,该文件包含模拟设备和计划)。演示模式用于队列服务器的评估和测试。CLI 参数可用于自定义RE管理器并指定光束线启动脚本的位置。
使用配置文件
RE管理器可以使用配置文件(YML)进行自定义。在生产部署中,将多个参数合并到一个配置文件中可能更为方便。配置文件的路径可通过环境变量QSERVER_CONFIG或 CLI 参数 --config 传递给管理器。传递给start-re-manager的CLI参数会覆盖配置文件或环境变量中设置的参数。
启动代码的位置
RE管理器可以基于来自IPython风格启动脚本集合、Python脚本或Python模块的启动代码来创建 RE Worker环境。同时,还必须指定自动生成的existing_plans_and_devices.yaml文件(参见“更新现有计划和设备列表”以及qserver-list-plans-devices工具)和 user_group_permissions.yaml文件的位置。existing_plans_and_devices.yaml文件是可选的,可以通过打开RE Worker环境自动生成,但必须正确指定指向现有目录中某个位置的文件路径。另外,该文件也可以先通过qserver-list-plans-devices CLI工具生成。
IPython风格的启动脚本集合:使用参数--startup-dir指定启动脚本集合所在的目录路径。两个 .yaml 文件预计都位于该启动目录中。如果 .yaml 文件的位置不同,请使用参数--existing-plans-devices和--user-group-permissions指定正确的路径。
IPython配置文件:如果启动脚本集合位于某个IPython配置文件的启动目录中,则可以使用参数--startup-profile将该配置文件名传递给RE管理器。此选项是为了方便使用,可以避免指定长长的启动目录路径。
Python脚本:使用参数--startup-script指定包含启动代码的Python 脚本路径(.py 文件)。只会加载该单个脚本。脚本中可以包含从其他脚本或模块的导入。由于对于.yaml文件没有明显的路径,因此必须使用参数--existing-plans-devices和--user-group-permissions显式指定这些文件的路径。
Python 模块:使用参数--startup-module指定包含启动代码的已安装模块的名称。两个 .yaml 文件的路径都必须显式指定。
运行引擎和Databroker的实例
RE管理器不会自动创建RE实例,也不会将已有的RE订阅到任何用户定义的回调函数。RE必须在启动代码中实例化并完成全部配置。同时,RE管理器也允许在没有RE实例的情况下成功加载启动代码。在这种情况下,在需要运行引擎能够被执行的任何操作(例如运行一个计划)之前,必须通过其他方式(如上传并执行脚本)创建和配置RE。
请注意: RE管理器中用于创建和配置RE的内置功能已从代码库中移除。这包括对参数--databroker-config、--zmq-data-proxy-addr、--kafka-server、--kafka-topic以及--use-persistent-metadata的支持。参数--keep-re已被弃用,RE管理器会忽略该参数。当前RE管理器的行为始终就像设置--keep-re时的状态。
更新现有计划和设备列表
--update-existing-plans-devices参数决定队列服务器何时更新磁盘文件中存储的现有计划和设备列表。关于包含现有计划和设备列表的文件的位置,请参阅“使用配置文件”的说明。RE管理器进程在启动时会从磁盘文件加载这些列表,并用于生成初始的允许计划和设备列表。这些列表用于验证提交的计划,从而允许用户在启动脚本加载之前将计划提交到队列。同时,这些列表也会分发给客户端,并用于生成用户界面。因此,保持存储的现有计划和设备列表为最新非常重要。该参数允许在以下模式之间做选择用于更新列表:
- NEVER:队列服务器永远不会覆盖已有文件,也不会在文件缺失时创建新文件。用户需要手动运行qserver-list-plans-devices CLI 工具来更新文件。打开RE Worker环境会生成当前会话可用的现有计划和设备列表,但不会保存到文件中。下次启动队列服务器时,将从磁盘加载原有的现有计划和设备列表。当使用参数restore_plans_devices=True调用permissions_reload 0MQ API时,也会从磁盘重新加载原有列表。在环境已打开的情况下重启RE管理器进程,不会从磁盘重新读取现有计划和设备列表。此选项可以用于“静态”、很少变更启动脚本的工作流,即不希望动态更改现有计划和设备列表的情况。
- ENVIRONMENT_OPEN(默认):每次打开RE Worker环境时,队列服务器会检查现有计划和设备列表是否为过期状态,并在必要时将新列表保存到文件中。这确保了下次启动队列服务器时能够加载最新的列表。在该模式下,无需调用qserver-list-plans-devices来生成列表,而是可以将更新存储的列表的任务交给队列服务器。需要注意的是,直到打开RE Worker环境的操作成功完成前,队列服务器不会知道启动代码的变更。当启动队列服务器不方便时,qserver-list-plans-devices仍然可用于调试启动代码或生成现有计划和设备列表。
- ALWAYS:每次在RE命名空间中添加或删除计划或设备时,队列服务器都会更新存储在文件中的现有计划和设备列表。此选项目前尚未完全实现,其行为结果与 ENVIRONMENT_OPEN 模式相同。
IPython内核的配置
以下参数组用于配置IPython内核。更多信息请参阅“IPytho内核配置”。如果未启用IPython模式,则这些参数将被忽略。
- --use-ipython-kernel - 启用 IPython 模式。该参数可取值ON 或OFF。
- --ipython-dir - IPython 根目录的路径,该目录包含配置文件。会覆盖 IPYTHONDIR 环境变量。
- --ipython-matplotlib - 默认的 Matplotlib 后端,通常为 qt5。该参数的含义及可接受的值与 IPython的--matplotlib参数相同。其值将直接传递给IPython内核。
- 参数--ipython-kernel-ip、--ipython-connection-file、--ipython-connection-dir、--ipython-shell-port、--ipython-iopub-port、--ipython-stdin-port、--ipython-hb-port 和--ipython-control-port用于配置 IPython 内核的连接。
控制台输出
RE管理器会捕获自身以及运行中的计划产生的stdout和stderr输出。这些输出可以打印到终端,也可以发布到0MQ套接字(与控制通信所用的socket 不同)。
- --zmq-info-addr 用于设置 0MQ “PUB” 套接字的地址。
- 设置--zmq-publish-console ON可将收集到的输出发布到0MQ套接字。
- 设置 --console-output OFF 可禁止输出到终端。
0MQ控制通信通道的加密
如果QSERVER_ZMQ_PRIVATE_KEY_FOR_SERVER环境变量包含一个表示有效私钥的字符串,则会启用控制通道的加密功能。客户端必须使用与该公钥/私钥对匹配的正确公钥才能与RE 管理器进行通信。公钥/私钥对可以使用qserver-zmq-keys工具生成。
其它配置参数
- --zmq-control-addr:服务器使用的0MQ socket地址。该服务器由RE管理器管理,用于传递来自客户端的控制命令。
- --zmq-encoding:用于选择所有套接字上0MQ通信socket的编码方式。支持的值有json(默认)和 msgpack。
- --redis-addr:RE管理器用作持久化存储的Redis服务器地址。
- --verbose、--quiet和--silent选项用于修改RE管理器的日志详细程度。
- --permitted-re-metadata-keys:指定允许使用的RE元数据键列表。
start-re-manager -h 显示帮助信息:
bl0202@bl0202-Diffraction:~/Desktop$ start-re-manager -h
usage: start-re-manager [-h] [--config CONFIG_PATH] [--zmq-control-addr ZMQ_CONTROL_ADDR]
[--zmq-addr ZMQ_ADDR] [--zmq-encoding ZMQ_ENCODING]
[--startup-profile STARTUP_PROFILE]
[--startup-module STARTUP_MODULE | --startup-script STARTUP_SCRIPT | --startup-dir STARTUP_DIR]
[--ignore-invalid-plans {ON,OFF}]
[--device-max-depth DEVICE_MAX_DEPTH]
[--existing-plans-devices EXISTING_PLANS_AND_DEVICES_PATH]
[--update-existing-plans-devices {NEVER,ENVIRONMENT_OPEN,ALWAYS}]
[--user-group-permissions USER_GROUP_PERMISSIONS_PATH]
[--user-group-permissions-reload {NEVER,ON_REQUEST,ON_STARTUP}]
[--redis-addr REDIS_ADDR] [--redis-name-prefix REDIS_NAME_PREFIX]
[--keep-re] [--use-ipython-kernel {ON,OFF}]
[--ipython-dir IPYTHON_DIR]
[--ipython-matplotlib IPYTHON_MATPLOTLIB]
[--ipython-kernel-ip IPYTHON_KERNEL_IP]
[--ipython-connection-file IPYTHON_CONNECTION_FILE]
[--ipython-connection-dir IPYTHON_CONNECTION_DIR]
[--ipython-shell-port IPYTHON_SHELL_PORT]
[--ipython-iopub-port IPYTHON_IOPUB_PORT]
[--ipython-stdin-port IPYTHON_STDIN_PORT]
[--ipython-hb-port IPYTHON_HB_PORT]
[--ipython-control-port IPYTHON_CONTROL_PORT]
[--zmq-info-addr ZMQ_INFO_ADDR]
[--zmq-publish-console-addr ZMQ_PUBLISH_CONSOLE_ADDR]
[--zmq-publish-console {ON,OFF}] [--console-output {ON,OFF}]
[--verbose | --quiet | --silent]
Start Run Engine (RE) Manager
bluesky-queueserver version 0.0.24
可以通过将QSERVER_ZMQ_PRIVATE_KEY_FOR_SERVER环境变量的值设置为一个有效的私钥(z85 编码的 40 字符字符串)来启用 ZeroMQ 通信服务器的加密功能:
export QSERVER_ZMQ_PRIVATE_KEY_FOR_SERVER='<私钥>'
可以通过运行qserver-zmq-keys生成公钥/私钥对。如果RE管理器配置为使用加密通道,则客户端也必须使用所生成密钥对中的公钥来启用加密。默认情况下加密是禁用的。
选项:
1. -h, --help
显示帮助消息并退出.
2. --config CONFIG_PATH
YML配置文件的路径,或包含多个配置文件的目录的路径。作为参数传入的路径会覆盖通过 QSERVER_CONFIG环境变量设置的路径。该配置路径必须指向一个现有的文件或目录(可以是空目录),否则管理器将无法启动。
3. --zmq-control-addr ZMQ_CONTROL_ADDR
ZMQ服务器的地址(控制连接)。该参数会覆盖由环境变量QSERVER_ZMQ_CONTROL_ADDRESS_FOR_SERVER定义的地址。如果未定义该参数或环境变量,则使用默认地址。地址格式:tcp://*:60615(默认:tcp://*:60615)。
4. --zmq-addr ZMQ_ADDR
此参数被弃用并且在将来发行中被移除. 使用--zmq-control-addr替代
5. --zmq-encoding ZMQ_ENCODING
用于0MQ通信的编码。该编码必须与RE管理器所使用的编码匹配。参数值会覆盖由 QSERVER_ZMQ_ENCODING_FOR_SERVER环境变量设置的值。该参数设置所有0MQ套接字所使用的编码。支持的值有:'json'(默认)或'msgpack'。
6. --startup-profile STARTUP_PROFILE
用于查找启动文件的IPython配置文件的名称。示例:如果IPython配置为在~/.ipython目录中查找配置文件(默认行为),且配置文件名为testing,则RE管理器将在~/.ipython/profile_testing/startup 目录中查找启动文件。如果使用基于IPython的工作进程,则运行启动模块或脚本之前,总是会先执行启动配置文件或默认配置文件中的代码。
7. --startup-module STARTUP_MODULE
包含启动代码的模块名称。每次打开RE Worker环境时都会导入该模块。示例: 'some.startup.module'。如果使用此选项,则必须显式指定现有计划和设备列表(--existing-plans-and-devices)以及用户组权限(--user-group-permissions)的路径。
8. --startup-script STARTUP_SCRIPT
包含启动代码的脚本路径。每次打开RE Worker环境时都会加载该脚本。示例: '~/startup/scripts/scripts.py'。如果使用此选项,则必须显式指定现有计划和设备列表(--existing-plans-and-devices)以及用户组权限(--user-group-permissions)的路径。
9. --startup-dir STARTUP_DIR
包含一组启动文件(*.py 和 *.ipy)的目录路径。该目录中的所有脚本将按照文件名按字母顺序排序,并在RE Worker 环境中加载。这组启动文件可以位于任何可访问的目录中。如果指定了 --startup-profile,则忽略此值。
10. --ignore-invalid-plans {ON,OFF}
在加载启动代码或执行脚本时,忽略具有不受支持签名的计划。默认行为是抛出异常。如果设置了此参数,则会为每个无效计划打印一条消息,并且只有正确处理过的计划才会被包含在现有计划列表中(默认:OFF)。
11. --device-max-depth DEVICE_MAX_DEPTH
包含在现有设备列表中的设备的默认最大深度:
- 0 - 无限深度(除面探测器之外的所有设备都包含完整的子设备树)
- 1 - 仅包含顶层设备
- 2 - 包含顶层设备和子设备,依此类推(默认:0)
12. --existing-plans-devices EXISTING_PLANS_AND_DEVICES_PATH
包含现有计划和设备列表的文件的路径。该路径可以是相对于配置文件集合目录的相对路径。如果该路径是一个目录,则使用默认文件名'existing_plans_and_devices.yaml'。
13. --update-existing-plans-devices {NEVER,ENVIRONMENT_OPEN,ALWAYS}
选择何时更新磁盘上存储的现有计划和设备列表。可选项包括:不更新存储的列表(NEVER)、在打开环境时更新列表(ENVIRONMENT_OPEN)或者每次列表发生变化时更新(ALWAYS)(默认:ENVIRONMENT_OPEN)。
14. --user-group-permissions USER_GROUP_PERMISSIONS_PATH
包含用户可用的计划和设备列表的文件的路径。该路径可以是相对于配置文件集合目录的相对路径。如果该路径是一个目录,则使用默认文件名 'user_group_permissions.yaml'。
15. --user-group-permissions-reload {NEVER,ON_REQUEST,ON_STARTUP}
选择何时从磁盘重新加载用户组权限。选项:
- 'NEVER' - RE管理器从不尝试从磁盘文件加载权限。如果从 Redis 加载权限失败,则在 RE 管理器首次启动时或应请求从磁盘加载。
- 'ON_REQUEST' - 当通过'permission_reload' API调用请求时,从磁盘文件加载权限。
- 'ON_STARTUP' - 每次RE管理器启动或收到 'permission_reload' API请求时,从磁盘加载权限(默认:ON_STARTUP)。
16. --redis-addr REDIS_ADDR
Redis服务器的地址,例如 'localhost'、'127.0.0.1'、'localhost:6379'、'localhost:6379/0'(默认:localhost)
17. --redis-name-prefix REDIS_NAME_PREFIX
RE管理器使用的Redis键名称的前缀(默认:qs_default)。
18. --keep-re
该参数已弃用。队列服务器会忽略该值。运行引擎实例必须始终在启动代码中定义和配置。该参数将在未来版本中移除。
19. --permitted-re-metadata-keys PERMITTED_RE_METADATA_KEYS [PERMITTED_RE_METADATA_KEYS ...]
允许使用的RE元数据键列表。键的配置形式为 Unix 路径,并递归地应用于所有子键。例如,默认值 '/' 将允许读取所有元数据键。值 '/key1'将允许读取 'key1' 及其所有子键,但不允许读取 'key2'。值'/key1/subkey' 将允许读取 'subkey' 及其所有子键,但不允许读取'key1' 的其他子键或 'key2'。此参数也可以通过QSERVER_PERMITTED_RE_METADATA_KEYS环境变量设置,其中各键用冒号分隔。
配置 IPython 内核:
用于配置RE Worker所使用的IPython内核的参数。只有当`--use-ipython-kernel`设置为 `ON`时,RE Worker才会创建IPython内核,否则这些参数将被忽略。
1.--use-ipython-kernel {ON,OFF}
在IPython内核中运行RE worker(默认:OFF)。
2. --ipython-dir IPYTHON_DIR
IPython根目录的路径,该目录包含配置文件。会覆盖 `IPYTHONDIR` 环境变量。如果不使用IPython内核,则忽略此参数。
3. --ipython-matplotlib IPYTHON_MATPLOTLIB
默认的Matplotlib后端,通常为 `qt5`。该参数的含义及可接受的值与IPython的 `--matplotlib` 参数相同。该值将直接传递给IPython内核。如果 worker 运行在纯 Python 模式下(`--use-ipython-kernel` 为 OFF),则忽略此参数。
4. --ipython-kernel-ip IPYTHON_KERNEL_IP
IPython内核的IP地址。该 IP 在内核启动时传递给IPython内核,并作为内核连接信息的一部分(通过 `config_get` API)返回给客户端。接受的值有:
- `localhost`(将 IP 设为 `127.0.0.1`)
- `auto`(尝试自动查找服务器的网络 IP 地址),
- 显式指定的服务器 IP 地址。
如果 IP地址为 `localhost` 或 `127.0.0.1`,则无法从远程机器访问该内核。如果 worker 未使用IPython,则忽略此参数。默认:localhost。
5. --ipython-connection-file IPYTHON_CONNECTION_FILE
IPython内核使用的连接文件的名称。如果指定了文件名,内核会尝试从该文件加载连接参数。如果文件不存在,内核会创建新文件。如果指定了文件名,则每次重新打开环境时内核将使用相同的连接参数,已连接的客户端(例如 Jupyter Console)会自动恢复连接。如果未指定连接文件名,则每次打开环境时内核都会创建新文件,需要重新连接客户端。此参数也可以通过 `QSERVER_IPYTHON_KERNEL_CONNECTION_FILE` 环境变量设置。
6. --ipython-connection-dir IPYTHON_CONNECTION_DIR
IPython内核查找连接文件的目录名称。可通过运行 `jupyter --runtime-dir`找到连接文件的默认位置。
(bluesky_2025_1) blctrl@blctrl:~/.ipython$ jupyter --runtime-dir
/home/blctrl/.local/share/jupyter/runtime
此参数也可以通过`QSERVER_IPYTHON_KERNEL_CONNECTION_DIR` 环境变量设置。
7. --ipython-shell-port IPYTHON_SHELL_PORT
IPython内核shell端口的地址,例如 60000。如果未指定,端口将随机选择。此参数也可以通过 `QSERVER_IPYTHON_KERNEL_SHELL_PORT` 环境变量设置。
8. --ipython-iopub-port IPYTHON_IOPUB_PORT
IPython内核iopub端口的地址,例如 60001。如果未指定,端口将随机选择。此参数也可以通过 `QSERVER_IPYTHON_KERNEL_IOPUB_PORT` 环境变量设置。
9. --ipython-stdin-port IPYTHON_STDIN_PORT
IPython内核stdin端口的地址,例如 60002。如果未指定,端口将随机选择。此参数也可以通过 `QSERVER_IPYTHON_KERNEL_STDIN_PORT` 环境变量设置。
10. --ipython-hb-port IPYTHON_HB_PORT
IPython内核hb端口的地址,例如 60003。如果未指定,端口将随机选择。此参数也可以通过 `QSERVER_IPYTHON_KERNEL_HB_PORT` 环境变量设置。
11. --ipython-control-port IPYTHON_CONTROL_PORT
IPython内核control端口的地址,例如 60004。如果未指定,端口将随机选择。此参数也可以通过 `QSERVER_IPYTHON_KERNEL_CONTROL_PORT` 环境变量设置。
配置控制台输出:
这些参数用于配置RE管理器生成的控制台输出的打印和发布。这些参数可以设置0MQ
套接字的地址,并启用/禁用控制台输出的打印和/或发布。
1 --zmq-info-addr ZMQ_INFO_ADDR
用于发布RE管理器状态和当前运行进程信息的ZMQ服务器套接字地址。目前仅在 `QS_Console` 主题下发布捕获的 STDOUT 和 STDERR。该参数会覆盖由环境变量 `QSERVER_ZMQ_INFO_ADDRESS_FOR_SERVER` 定义的地址。如果未定义该参数或环境变量,则使用默认地址。地址格式:`tcp://*:60625`(默认:tcp://*:60625)。
2. --zmq-publish-console-addr ZMQ_PUBLISH_CONSOLE_ADDR
此参数已弃用,将在未来版本中移除。请使用 `--zmq-info-addr` 代替。
3. --zmq-publish-console {ON,OFF}
启用(ON)或禁用(OFF)将控制台输出发布到0MQ(默认:OFF)。
4. --console-output {ON,OFF}
启用(ON)或禁用(OFF)在RE管理器终端中打印控制台输出(默认:ON)。
日志详细程度设置:
默认的日志设置(loglevel=INFO)提供了监控RE管理器运行的最佳数据量。选择 `--verbose`
选项可以查看收到的和发送的消息、添加和执行的计划等详细数据。使用`--quiet`和
`--silent`选项可以仅查看警告和错误消息,或禁用日志输出。
- --verbose 将日志级别设置为 DEBUG。
- --quiet 将日志级别设置为 WARNING。
- --silent 禁用日志输出。
qserver
qserver CLI工具允许通过在命令行中输入命令来与服务器进行通信。该工具主要用于队列服务器的测试、诊断以及生产环境中的紧急使用。该工具支持大部分队列服务器的0MQ API,包括提交计划、打开和关闭RE Worker环境、启动和停止队列等。有关支持的命令的完整列表,请参阅 qserver 的帮助信息。
如果RE管理器的0MQ地址与默认地址不同,请使用可选的--zmq-control-addr参数或 QSERVER_ZMQ_CONTROL_ADDRESS 环境变量将地址传递给qserver。如果在RE管理器上启用了加密,请将环境变量QSERVER_ZMQ_PUBLIC_KEY设置为一个表示有效0MQ服务器公钥的字符串。使用qserver-zmq-keys工具生成新的公钥/私钥对,或者从已知的服务器私钥生成公钥。
qserver可以以监控模式(qserver monitor)运行。在此模式下,该工具会定期请求并显示队列服务器的状态。
qserver -h 显示帮助信息:
(bluesky_2025_1) blctrl@blctrl:~/.ipython$ qserver -h
usage: qserver [-h] [--zmq-control-addr ZMQ_CONTROL_ADDR] [--address ADDRESS]
[--zmq-encoding ZMQ_ENCODING] [--lock-key LOCK_KEY]
command [command ...]
与RE Monitor通信的命令行工具
bluesky-queueserver version 0.0.24
位置参数:
command 定义此条命令的关键字和参数的序列
选项:
1. -h, --help
显示此帮助信息并退出
2. --zmq-control-addr ZMQ_CONTROL_ADDR, -a ZMQ_CONTROL_ADDR
RE管理器控制套接字的地址。该参数会覆盖通过环境变量QSERVER_ZMQ_CONTROL_ADDRESS 设置的地址。如果未通过该参数或环境变量设置地址,则使用默认值。地址格式:'tcp://127.0.0.1:60615'(默认:'tcp://localhost:60615')。
3. --address ADDRESS
此参数已弃用,将被移除。请使用 --zmq-control-addr 代替。
4. --zmq-encoding ZMQ_ENCODING
用于0MQ通信的编码。该编码必须与RE管理器所使用的编码匹配。参数值会覆盖由 QSERVER_ZMQ_ENCODING 环境变量设置的值。支持的值有:'json'(默认)或 'pickle'。
5. --lock-key LOCK_KEY, -k LOCK_KEY
锁键。该键是一个任意字符串,用于锁定和解锁RE管理器('lo
ck' 和 'unlock' API),并在环境或队列被锁定时控制管理器。如果RE管理器配置为使用加密的ZeroMQ通信通道,则必须在运行`qserver` CLI 工具之前通过设置环境变量QSERVER_ZMQ_PUBLIC_KEY为一个有效的公钥值(z85 编码的 40字符字符串)来启用加密:
export QSERVER_ZMQ_PUBLIC_KEY='<公钥>'
默认情况下加密是禁用的。
CLI 命令示例
1. qserver -h
显示帮助
2. qserver monitor
以监控模式启动 'qserver'
3. qserver ping
(apsbits_env) blctrl@blctrl-s3:~$ qserver ping # 通过ZMQ向RE管理器发送 'ping' 请求
Arguments: ['ping']
14:32:40 - MESSAGE:
{'msg': 'RE Manager v0.0.23',
...}
4. qserver status
(apsbits_env) blctrl@blctrl-s3:~$ qserver status # 请求管理器的状态
Arguments: ['status']
14:34:17 - MESSAGE:
{'msg': 'RE Manager v0.0.23',
...}
5. qserver config
(apsbits_env) blctrl@blctrl-s3:~$ qserver config # 获取RE管理器的配置
Arguments: ['config']
14:35:24 - MESSAGE:
{'success': True, 'msg': '', 'config': {'ip_connect_info': {}}}
6.qserver environment open
(apsbits_env) blctrl@blctrl-s3:~$ qserver environment open # 打开RE环境
Arguments: ['environment', 'open']
14:37:02 - MESSAGE:
{'success': True, 'msg': ''}
7.qserver environment close
(apsbits_env) blctrl@blctrl-s3:~$ qserver environment close # 关闭 RE 环境
Arguments: ['environment', 'close']
14:37:38 - MESSAGE:
{'success': True, 'msg': ''}
8. qserver environment destroy
(apsbits_env) blctrl@blctrl-s3:~$ qserver environment destroy # 销毁RE环境(终止RE worker 进程)
Arguments: ['environment', 'destroy']
14:38:53 - MESSAGE:
{'success': True, 'msg': ''}
9. qserver environment update
(apsbits_env) blctrl@blctrl-s3:~$ qserver environment update # 基于worker命名空间的内容更新 worker 状态
Arguments: ['environment', 'update']
14:39:44 - MESSAGE:
{'success': True, 'msg': '', 'task_uid': 'a32d519f-c249-46c0-ba7e-b2764fcc9c12'}
10 .qserver environment update background
(apsbits_env) blctrl@blctrl-s3:~$ qserver environment update background # 以后台任务的形式更新worker状态
Arguments: ['environment', 'update', 'background']
14:40:36 - MESSAGE:
{'success': True, 'msg': '', 'task_uid': 'ad2f6012-22b0-4b0c-982c-ab15738e762d'}
11. qserver existing plans
(apsbits_env) blctrl@blctrl-s3:~$ qserver existing plans # 请求现有计划列表
Arguments: ['existing', 'plans']
14:42:20 - MESSAGE:
{'success': True,
'msg': '',
'plans_existing': {'rel_spiral': '{...}',
'ramp_plan': '{...}',
'scan_nd': '{...}',
'tweak': '{...}',
'count_bundle_test': '{...}',
'plan_test_progress_bars': '{...}',
'tune_centroid': '{...}',
'spiral': '{...}',
'log_scan': '{...}',
'sim_multirun_plan_nested': '{...}',
'rel_spiral_fermat': '{...}',
'inner_product_scan': '{...}',
'marked_up_count': '{...}',
'null': '{...}',
'scan': '{...}',
'adaptive_scan': '{...}',
'_sim_plan_inner': '{...}',
'fly': '{...}',
'count': '{...}',
'mv': '{...}',
'list_scan': '{...}',
'rel_list_grid_scan': '{...}',
'move_then_count': '{...}',
'mvr': '{...}',
'x2x_scan': '{...}',
'grid_scan': '{...}',
'rel_grid_scan': '{...}',
'rel_scan': '{...}',
'spiral_square': '{...}',
'rel_spiral_square': '{...}',
'rel_adaptive_scan': '{...}',
'rel_list_scan': '{...}',
'relative_inner_product_scan': '{...}',
'spiral_fermat': '{...}',
'rel_log_scan': '{...}',
'list_grid_scan': '{...}'},
'plans_existing_uid': 'a9a5ecd9-9b28-4f30-a914-d98772a0850b'}
12. qserver existing devices
(apsbits_env) blctrl@blctrl-s3:~$ qserver existing devices # 请求现有设备列表
Arguments: ['existing', 'devices']
14:43:27 - MESSAGE:
{'success': True,
'msg': '',
'devices_existing': {'motor_empty_hints1': '{...}',
'det2': '{...}',
'motor_empty_hints2': '{...}',
'bool_sig': '{...}',
'ab_det': '{...}',
'custom_test_flyer': '{...}',
'flyer2': '{...}',
'motor_no_pos': '{...}',
'invariant1': '{...}',
'flyer1': '{...}',
'det1': '{...}',
'motor': '{...}',
'det_with_conf': '{...}',
'sim_bundle_B': '{...}',
'identical_det': '{...}',
'sig': '{...}',
'motor_no_hints1': '{...}',
'motor1': '{...}',
'custom_test_signal': '{...}',
'rand2': '{...}',
'new_trivial_flyer': '{...}',
'motor3': '{...}',
'pseudo3x3': '{...}',
'direct_img': '{...}',
'det4': '{...}',
'rand': '{...}',
'invariant2': '{...}',
'jittery_motor1': '{...}',
'jittery_motor2': '{...}',
'pseudo1x3': '{...}',
'motor_no_hints2': '{...}',
'noisy_det': '{...}',
'det': '{...}',
'signal': '{...}',
'direct_img_list': '{...}',
'trivial_flyer': '{...}',
'det3': '{...}',
'custom_test_device': '{...}',
'img': '{...}',
'sim_bundle_A': '{...}',
'det_with_count_time': '{...}',
'det5': '{...}',
'motor2': '{...}'},
'devices_existing_uid': '479563bc-91e9-43cf-81c3-2c8e7b89b4d5'}
13. qserver allowed plans
(apsbits_env) blctrl@blctrl-s3:~$ qserver allowed plans # 请求允许的计划列表
Arguments: ['allowed', 'plans']
14:44:33 - MESSAGE:
{'success': True,
'msg': '',
'plans_allowed': {'adaptive_scan': '{...}',
'count': '{...}',
...},
'plans_allowed_uid': '8dddb3d6-8207-429c-9841-42db62ba4fa3'}
14. qserver allowed devices # 请求允许的设备列表
(apsbits_env) blctrl@blctrl-s3:~$ qserver allowed devices
Arguments: ['allowed', 'devices']
14:45:26 - MESSAGE:
{'success': True,
'msg': '',
'devices_allowed': {'ab_det': '{...}',
'bool_sig': '{...}',
'custom_test_device': '{...}',
'custom_test_flyer': '{...}',
'custom_test_signal': '{...}',
'det': '{...}',
'det1': '{...}',
'det2': '{...}',
'det3': '{...}',
'det4': '{...}',
'det5': '{...}',
'det_with_conf': '{...}',
'det_with_count_time': '{...}',
'direct_img': '{...}',
'direct_img_list': '{...}',
'flyer1': '{...}',
'flyer2': '{...}',
'identical_det': '{...}',
'img': '{...}',
'invariant1': '{...}',
'invariant2': '{...}',
'jittery_motor1': '{...}',
'jittery_motor2': '{...}',
'motor': '{...}',
'motor1': '{...}',
'motor2': '{...}',
'motor3': '{...}',
'motor_empty_hints1': '{...}',
'motor_empty_hints2': '{...}',
'motor_no_hints1': '{...}',
'motor_no_hints2': '{...}',
'motor_no_pos': '{...}',
'new_trivial_flyer': '{...}',
'noisy_det': '{...}',
'pseudo1x3': '{...}',
'pseudo3x3': '{...}',
'rand': '{...}',
'rand2': '{...}',
'sig': '{...}',
'signal': '{...}',
'sim_bundle_A': '{...}',
'sim_bundle_B': '{...}',
'trivial_flyer': '{...}'},
'devices_allowed_uid': 'e9361634-c293-4ff3-afa2-f92f9ef1e4fa'}
15. qserver permissions reload
(apsbits_env) blctrl@blctrl-s3:~$ qserver permissions reload # 重新加载用户权限并生成允许的计划和设备列表
Arguments: ['permissions', 'reload']
14:46:23 - MESSAGE:
{'success': True, 'msg': ''}
16. qserver permissions reload lists
(apsbits_env) blctrl@blctrl-s3:~$ qserver permissions reload lists # 同上,但从磁盘重新加载现有计划和设备列表
Arguments: ['permissions', 'reload', 'lists']
14:47:10 - MESSAGE:
{'success': True, 'msg': ''}
17. qserver permissions set <path-to-file>
设置用户组权限(来自 .yaml 文件)
18. qserver permissions get
(apsbits_env) blctrl@blctrl-s3:~$ qserver permissions get # 获取当前用户组权限
Arguments: ['permissions', 'get']
14:50:09 - MESSAGE:
{'success': True,
'msg': '',
'user_group_permissions': {'user_groups': {'root': {'allowed_plans': [None],
'forbidden_plans': [':^_'],
'allowed_devices': [None],
'forbidden_devices': [':^_:?.*'],
'allowed_functions': [None],
'forbidden_functions': [':^_']},
'primary': {'allowed_plans': [':.*'],
'forbidden_plans': [None],
'allowed_devices': [':?.*:depth=5'],
'forbidden_devices': [None],
'allowed_functions': ['function_sleep',
':^func_for_test']},
'test_user': {'allowed_plans': [':^count',
':scan$'],
'forbidden_plans': [':^adaptive_scan$',
':^inner_product'],
'allowed_devices': [':^det:?.*',
':^motor:?.*',
':^sim_bundle_A:?.*'],
'forbidden_devices': [':^det[3-5]$:?.*',
':^motor\\d+$:?.*'],
'allowed_functions': [':element$',
':elements$',
'function_sleep',
'clear_buffer',
':^unit_test.*$'],
'forbidden_functions': [':^_']}}}}
19. qserver queue add plan '<plan-params>'
将计划添加到队列末尾
20. qserver queue add instruction <instruction>
将指令添加到队列末尾
21. qserver queue add plan front '<plan-params>'
将计划添加到队列前端
22. qserver queue add plan back '<plan-params>'
将计划添加到队列末尾
23. qserver queue add plan 2 '<plan-params>'
在位置 2 插入计划
24. qserver queue add instruction 2 <instruction>
在位置 2 插入指令
25. qserver queue add plan -1 '<plan-params>'
在位置 -1 插入计划
26. qserver queue add plan before '<uid>' '<plan-params>'
在具有给定UID的计划之前插入计划
27. qserver queue add plan after '<uid>' '<plan-params>'
在具有给定UID的计划之后插入计划
注意:位置索引从0开始。将计划插入位置0会将其推到队列前端。负位置索引从队列末尾开始计数。请求索引为-1的计划会返回队列的最后一个计划。在位置-1插入计划会使其成为倒数第二个。
28. qserver queue update plan <uid> '<plan-params>'
用计划更新具有<uid>的项
29. qserver queue replace plan <uid> '<plan-params>'
用计划替换具有<uid>的项
30. qserver queue update instruction <uid> '<instruction>'
用指令更新具有<uid>的项
31. qserver queue replace instruction <uid> '<instruction>'
用指令替换具有 <uid> 的项
32. qserver queue execute plan '<plan-params>'
立即执行计划
33. qserver queue execute instruction <instruction>
立即执行指令
计划的 JSON 规范示例:'{"name": "count", "args": [["det1", "det2"]], "kwargs": {"num": 10, "delay": 1}}'
支持的队列指令
34. queue-stop
停止队列的执行.
35. qserver queue get
(apsbits_env) blctrl@blctrl-s3:~$ qserver queue get # 请求队列中的项(计划或指令)列表
Arguments: ['queue', 'get']
15:44:05 - MESSAGE:
{'success': True,
'msg': '',
'items': [{'name': 'count',
'args': [['det1', 'det2']],
'kwargs': {'num': 10, 'delay': 1},
'item_type': 'plan',
'user': 'qserver-cli',
'user_group': 'primary',
'item_uid': 'dccf3537-0f1c-4a18-bd3e-8ce5a1ff82ff'},
{'name': 'count',
'args': [['det1']],
'kwargs': {'num': 10, 'delay': 2},
'item_type': 'plan',
'user': 'qserver-cli',
'user_group': 'primary',
'item_uid': 'eeff88b4-5692-42d2-bb8a-5d80b81ddec5'},
{'name': 'count',
'args': [['det2']],
'kwargs': {'num': 5, 'delay': 5},
'item_type': 'plan',
'user': 'qserver-cli',
'user_group': 'primary',
'item_uid': 'e18511fc-573a-43ca-8157-9b1c2c61228c'}],
'running_item': {},
'plan_queue_uid': '85fcad9d-4d09-4fca-badf-e42a41526f47'}
36. qserver queue clear
# 清空队列(移除队列中的所有计划)
37. qserver queue item get
(apsbits_env) blctrl@blctrl-s3:~$ qserver queue item get # 请求队列中的最后一个项
Arguments: ['queue', 'item', 'get']
15:46:05 - MESSAGE:
{'success': True,
'msg': '',
'item': {'name': 'count',
'args': [['det2']],
'kwargs': {'num': 5, 'delay': 5},
'item_type': 'plan',
'user': 'qserver-cli',
'user_group': 'primary',
'item_uid': 'e18511fc-573a-43ca-8157-9b1c2c61228c'}}
38. qserver queue item get back
请求队列中的最后一个项
39. qserver queue item get front
请求队列中的第一个项
40. qserver queue item get 2
请求位置 2 的项
41. qserver queue item get '<uid>'
请求具有给定项 UID 的项
42. qserver queue item remove
从队列中移除最后一个项
43. qserver queue item remove back
从队列中移除最后一个项
44. qserver queue item remove front
从队列中移除第一个项
45. qserver queue item remove 2
移除位置2的项
46. qserver queue item remove '<uid>'
移除具有给定UID的项
49. qserver queue item move 2 5
将项从位置 2 移动到队列中的位置 5
50. qserver queue item move back front
将项从队列末尾移动到队列前端
51. qserver queue item move front -2
将项从队列前端移动到位置-2
52. qserver queue item move '<uid-src>' 5
将具有 UID <uid-src>的项移动到位置 5
53. qserver queue item move 2 before '<uid-dest>'
将位置2的项放在具有<uid-dest>的项之前
54. qserver queue item move 2 after '<uid-dest>'
将位置2的项放在具有 <uid-dest> 的项之后
55. qserver queue item move '<uid-src>' before '<uid-dest>'
将具有<uid-src>的项放在具有<uid-dest>的项之前
56. qserver queue start
开始执行队列
57. qserver queue stop
请求在当前计划执行后停止队列
58. qserver queue stop cancel
取消停止队列执行的请求
59. qserver queue autostart enable
启用自动启动
60. qserver queue autostart disable
禁用自动启动
61. 更改队列模式。启用/禁用 LOOP 和 IGNORE_FAILURES 模式:
qserver queue mode set loop True
qserver queue mode set loop False
qserver queue mode set ignore_failures True
qserver queue mode set ignore_failures False
62. 以下请求转发给运行引擎:
qserver re pause # 请求在下一个检查点暂停当前正在执行的计划
qserver re pause deferred # 请求在下一个检查点暂停当前正在执行的计划
qserver re pause immediate # 请求立即暂停当前正在执行的计划
qserver re resume # 恢复执行已暂停的计划
qserver re stop # 停止执行已暂停的计划
qserver re abort # 中止执行已暂停的计划
qserver re halt # 暂停执行已暂停的计划
qserver re runs # 获取活动运行列表(由当前正在执行的计划生成的运行)
qserver re runs active # 获取活动运行列表
qserver re runs open # 获取开放运行列表(活动运行的子集)
qserver re runs closed # 获取已关闭运行列表(活动运行的子集)
63. 计划历史相关命令
qserver history get # 请求计划历史
qserver history clear # 清空计划历史
qserver history clear 200 # 清空历史,保留最新的200项
qserver history clear <uid> # 清空历史,从指定项开始移除较旧的项
64. 函数执行相关命令
qserver function execute <function-params> # 开始执行函数
qserver function execute <function-params> background # ... 在后端线程中执行
函数的 JSON 规范示例("args" 和 "kwargs" 是可选的):'{"name": "function_sleep", "args": [20], "kwargs": {}}'
65. 脚本相关命令
qserver script upload <path-to-file> # 将脚本上传到RE Worker环境
qserver script upload <path-to-file> background # ... 在后端执行
qserver script upload <path-to-file> update-re # ... 允许更新'RE'和'db'
qserver script upload <path-to-file> keep-lists # ... 保持允许的计划和现有计划/设备列表不变(节省处理时间)
66. 任务相关命令
qserver task result <task-uid> # 加载具有给定UID的任务的状态或结果
qserver task status <task-uid> # 检查具有给定UID的任务的状态
67. 内核相关命令
qserver kernel interrupt # 向IPython内核发送中断(Ctrl-C)
qserver kernel interrupt task # ... 如果管理器正在执行任务
qserver kernel interrupt plan # ... 如果管理器正在执行计划
qserver kernel interrupt task plan # ... 如果管理器正在执行计划或任务
68. 锁相关的命令
qserver lock environment -k 90g94 # 锁定环境
qserver lock environment "Locked for 1 hr" -k 90g94 # 添加文本备注
qserver lock queue -k 90g94 # 锁定队列
qserver lock all -k 90g94 # 锁定环境和队列
qserver lock info # 加载锁定状态
qserver lock info -k 90g94 # 加载锁定状态并验证密钥
qserver unlock -k 90g94 # 解锁 RE Manager
69. RE管理器相关命令
qserver manager stop # 安全退出RE Manager 应用程序
qserver manager stop safe on # 安全退出RE Manager 应用程序
qserver manager stop safe off # 强制停止RE Manager 应用程序
qserver manager kill test # 通过停止 asyncio 事件循环来终止 RE Manager。仅用于测试。
注意:使用 'safe on' 选项退出仅在RE管理器处于IDLE状态(队列未运行)时才会成功。如果使用 'safe off' 选项调用,该请求将强制RE管理器终止RE Worker进程并退出,即使有计划正在运行.
qserver-list-plans-devices
qserver-list-plans-devices加载启动代码并生成现有的计划和设备列表。该工具可用于以下目的:
- 验证启动代码。如果启动代码能被qserver-list-plans-devices成功加载,它被成功加载到RE Worker环境中可能性很大。
- 生成现有计划和设备列表(existing_plans_and_devices.yaml)。队列服务器可以配置为自动生成或更新该文件(参见“更新现有计划和设备列表”),但有时手动生成或作为安装脚本的一部分来完成会更方便。
每当启动代码中新增或移除设备/计划,或者现有计划的签名被修改(例如添加或删除参数、更改类型注解或文本描述等)时,都必须更新现有计划和设备列表,因为这些变更可能会影响其他功能,例如计划验证或分发给客户端的允许计划和设备列表。
输出文件的默认名称是existing_plans_and_devices.yaml。除非使用--file-dir参数指定了不同的路径,否则文件始终保存到当前目录。如果输出文件需要使用不同于默认的名称,可以通过--file-name参数指定新名称。
该工具可以从IPython启动脚本集合、Python脚本或Python模块加载启动代码。请分别使用--startup-dir、--startup-script和--startup-module参数来指定启动文件所在的目录路径、启动脚本的路径或模块名称。
qserver-list-plans-devices -h显示帮助信息:
(EPICS) ubuntu@VM-0-4-ubuntu:~$ qserver-list-plans-devices -h
usage: qserver-list-plans-devices [-h] [--file-dir FILE_DIR] [--file-name FILE_NAME]
[--startup-profile STARTUP_PROFILE]
[--startup-dir STARTUP_DIR | --startup-module STARTUP_MODULE_NAME | --startup-script STARTUP_SCRIPT_PATH]
[--ipython-dir IPYTHON_DIR]
[--use-ipython-kernel {ON,OFF}]
[--ignore-invalid-plans {ON,OFF}]
[--device-max-depth DEVICE_MAX_DEPTH]
Bluesky-QServer:
用于产生来自束线启动脚本的计划和设备列表的CLI工具.
bluesky-queueserver version 0.0.24
选项:
1.-h, --help
显示此帮助信息并退出
2. --file-dir FILE_DIR
保存计划和设备列表的目录名称。默认情况下,列表会保存到当前目录下的'existing_plans_and_devices.yaml' 文件中。
3. --file-name FILE_NAME
保存计划和设备列表的文件名称。默认文件名:'existing_plans_and_devices.yaml'。
4. --startup-profile STARTUP_PROFILE
IPython 配置文件的名称,用于查找启动文件的位置。示例:如果IPython配置为在 '~/.ipython' 目录中查找配置文件(默认行为),且配置文件名为 'testing',则RE管理器将在 '~/.ipython/profile_testing/startup'目录中查找启动文件。如果使用基于IPython的工作进程,则在运行启动模块或脚本之前,总是会先执行启动配置文件或默认配置文件中的代码。
5. --startup-dir STARTUP_DIR
包含一组启动文件(*.py 和 *.ipy)的目录路径。该目录中的所有脚本将按照文件名按字母顺序排序,并在RE Worker环境中加载。这组启动文件可以位于任何可访问的目录中。例如,'qserver-list-plans-devices--startup-dir .'会从当前目录加载启动文件,并将列表保存到当前目录下的文件中。
6. --startup-module STARTUP_MODULE_NAME
包含启动代码的模块名称。该模块必须安装在当前环境中。例如,'qserver-list-plans-devices --startup-module some.startup.module' 会从模块'some.startup.module' 加载启动代码,并将结果保存到当前目录下的文件中。
7. --startup-script STARTUP_SCRIPT_PATH
包含启动代码的脚本路径。例如,'qserver-list-plans-devices--startup-script ~/startup/scripts/script.py' 会从该脚本加载启动代码,并将结果保存到当前目录下的文件中。
8. --ipython-dir IPYTHON_DIR
IPython根目录的路径,该目录包含配置文件。会覆盖IPYTHONDIR环境变量。
9. --use-ipython-kernel {ON,OFF}
在IPython内核中运行RE worker(默认:OFF)。
10. --ignore-invalid-plans {ON,OFF}
在加载启动代码或执行脚本时,忽略带有不受支持签名的计划。默认行为是抛出异常。如果设置了此参数,则会为每个无效计划打印一条消息,并且只有正确处理过的计划才会被包含在现有计划列表中(默认:OFF)。
11. --device-max-depth DEVICE_MAX_DEPTH
包含在现有设备列表中的设备的默认最大深度:
- 0 - 无限深度(除面探测器之外的所有设备都包含完整的子设备树),
- 1 - 仅包含顶层设备,
- 2 - 包含顶层设备和子设备,依此类推(默认:0)。
qserver-zmq-key
使用此工具生成随机公钥-私钥对,以保护RE管理器使用的0MQ控制通信通道:
- 私钥:在运行RE管理器的工作站或服务器上,设置为 QSERVER_ZMQ_PRIVATE_KEY_FOR_SERVER环境变量的值。
- 公钥:在运行客户端应用程序的工作站上,设置为QSERVER_ZMQ_PUBLIC_KEY环境变量的值。
如果已知服务器私钥,可以通过--zmq-private_key将私钥传递给qserver-zmq-keys来生成公钥。
qserver-zmq-keys -h 显示帮助信息:
(apsbits_env) blctrl@blctrl-s3:~$ qserver-zmq-keys -h
usage: qserver-zmq-keys [-h] [--zmq-private-key ZMQ_PRIVATE_KEY]
Bluesky-QServer:
ZMQ安全: 为ZeroMQ控制通信通道产生公钥-私钥对
bluesky-queueserver version 0.0.23
为RE管理器和客户端应用程序之间安全的0MQ控制连接产生新的公钥-私钥对.
如果以`--zmq-private-key`参数传递私钥, 则产生的密对基于提供的私钥.
1.-h, --help
显示此帮助信息并退出
2. --zmq-private-key ZMQ_PRIVATE_KEY
RE管理器使用的私钥。如果提供了私钥,则会基于该私钥生成公钥。此选项允许根据已知的私钥创建(恢复)公钥。传入的值应为包含z85加密密钥的40字符字符串。
(apsbits_env) blctrl@blctrl-s3:~$ qserver-zmq-keys
====================================================================================
ZMQ SECURITY: New public-private key pair.
====================================================================================
Private key (RE Manager): qtC&efRDbAtFD9JsKqp=H/E<FfC@tATh%9$/8K}]
Public key (CLI client or HTTP server): S{KU4u*j?$n!nN@uC8NcCvu{UJ.mlP7k%anUlnw=
====================================================================================
(apsbits_env) blctrl@blctrl-s3:~$ qserver-zmq-keys --zmq-private-key 'qtC&efRDbAtFD9JsKqp=H/E<FfC@tATh%9$/8K}]'
====================================================================================
ZMQ SECURITY: Private key generated based on provided private key.
====================================================================================
Private key (RE Manager): qtC&efRDbAtFD9JsKqp=H/E<FfC@tATh%9$/8K}]
Public key (CLI client or HTTP server): S{KU4u*j?$n!nN@uC8NcCvu{UJ.mlP7k%anUlnw=
====================================================================================
qserver-console-monitor
qserver-console-monitor是一个简单的应用程序,它订阅 RE管理器通过0MQ发布的控制台输出(stdout 和 stderr),并将接收到的消息打印到终端(输出到stdout)。监控器打印的控制台输出应与 RE管理器终端中打印的输出相同。该监控器可以在与RE管理器相同的工作站上运行,也可以在能够通过网络访问运行RE管理器的工作站的任何计算机上运行。如果0MQ套接字的地址与默认地址不同,可以将其作为参数(--zmq-info-addr)传递给监控器应用程序。默认情况下,RE管理器不会将控制台输出发布到0MQ套接字。可以通过使用参数--zmq-publish-console启动RE管理器来启用发布功能:
start-re-manager --zmq-publish-console ON
$ qserver-console-monitor --zmq-info-addr 'tcp://192.168.50.211:60625'
INFO:bluesky_queueserver.manager.output_streaming:Subscribing to console output stream from 0MQ address: tcp://192.168.50.211:60625 ...
INFO:bluesky_queueserver.manager.output_streaming:Subscribing to 0MQ topic: 'QS_Console' ...
qserver-console-monitor -h显示帮助信息:
(apsbits_env) blctrl@blctrl-s3:~$ qserver-console-monitor -h
usage: qserver-console-monitor [-h] [--zmq-info-addr ZMQ_INFO_ADDR]
[--zmq-subscribe-addr ZMQ_SUBSCRIBE_ADDR]
[--zmq-encoding ZMQ_ENCODING]
Queue Server Console Monitor:
远程监控RE管理器发布的控制台输出的CLI命令.
bluesky-queueserver version 0.0.23
选项:
1. -h, --help
显示此帮助信息并退出
2. --zmq-info-addr ZMQ_INFO_ADDR
用于发布控制台输出的RE管理器套接字地址。该参数会覆盖通过QSERVER_ZMQ_INFO_ADDRESS环境变量设置的地址。如果未通过该参数或环境变量设置地址,则使用默认值。地址格式:'tcp://127.0.0.1:60625'(默认:tcp://localhost:60625)。
3. --zmq-subscribe-addr ZMQ_SUBSCRIBE_ADDR
此参数已弃用,将被移除。请使用 --zmq-info-addr 代替。
4. --zmq-encoding ZMQ_ENCODING
用于0MQ通信的编码。该编码必须与 RE Manager 所使用的编码匹配。参数值会覆盖由 QSERVER_ZMQ_ENCODING 环境变量设置的值。支持的值有:'json'(默认)或 'msgpack'。
qserver-clear-lock
qserver-clear-lock允许清除存储在Redis中的RE管理器锁。重启管理器并不会清除该锁:必须使用有效的锁键(用于锁定管理器的键)或应急锁键(可选)来显式清除。如果锁键丢失,且应急锁键未设置或未知,则可以通过运行qserver-clear-lock并重启RE管理器应用程序或服务来清除锁。该工具需要访问RE管理器所使用的Redis服务器。如果Redis地址与默认地址不同,必须使用参数 --redis-addr传递正确的地址。
(apsbits_env) blctrl@blctrl-s3:~$ qserver-clear-lock -h
usage: qserver-clear-lock [-h] [--redis-addr REDIS_ADDR]
[--redis-name-prefix REDIS_NAME_PREFIX]
Bluesky-QServer: 清除RE管理器锁.
bluesky-queueserver version 0.0.23
如果锁键丢失, 恢复锁定的RE管理器. 此工具需要访问RE管理器使用的Redis.
使用'--redis-addr'参数提供Redis服务的地址.
在清除锁后, 重启RE管理器.
选项:
1. -h, --help
显示此帮助信息并退出
2. --redis-addr REDIS_ADDR
Redis服务器的地址,例如 'localhost'、'127.0.0.1'、'localhost:6379'、'localhost:6379/0'(默认:localhost)。
3. --redis-name-prefix REDIS_NAME_PREFIX
RE Manager 使用的 Redis 键名称的前缀(默认:qs_default)。
qserver-console
启动Jupyter Console,连接到工作进程中运行的IPython内核。RE管理器必须在启用--use-ipython-kernel选项的情况下启动(通过 CLI 参数、配置文件参数或环境变量设置)。如果工作环境已关闭且内核未运行,则无法启动控制台。使用 Ctrl-D 退出控制台。在控制台中输入quit或exit将关闭工作环境。
(apsbits_env) blctrl@blctrl-s3:~$ qserver-console -h
usage: qserver-console [-h] [--zmq-control-addr ZMQ_CONTROL_ADDR]
[--zmq-encoding ZMQ_ENCODING]
Bluesky-QServer: Start Jupyter console for IPython kernel running in the worker process.
bluesky-queueserver version 0.0.23
从RE管理器请求IPython内核连接信息并启动Jupyter Console。RE Worker必须正在运行(环境已打开)且使用 IPython内核。RE管理器的0MQ控制端口地址可以作为参数或环境变量传递。如果控制通道启用了加密,可以通过设置QSERVER_ZMQ_PUBLIC_KEY环境变量来传递公钥。使用 Ctrl-D 退出控制台。在控制台中输入quit或exit 将关闭工作环境。
选项:
1. -h, --help
显示此帮助信息并退出
2. --zmq-control-addr ZMQ_CONTROL_ADDR, -a ZMQ_CONTROL_ADDR
RE管理器控制套接字的地址。该参数会覆盖通过环境变量QSERVER_ZMQ_CONTROL_ADDRESS 设置的地址。如果未通过该参数或环境变量设置地址,则使用默认值。地址格式:'tcp://127.0.0.1:60615'(默认:'tcp://localhost:60615')。
3. --zmq-encoding ZMQ_ENCODING
用于0MQ通信的编码。该编码必须与RE管理器所使用的编码匹配。参数值会覆盖由 QSERVER_ZMQ_ENCODING 环境变量设置的值。支持的值有:'json'(默认)或 'msgpack'。
qserver-qtconsole
启动Jupyter Qt Console,连接到工作进程中运行的 IPython 内核。Jupyter Qt Console是基于Qt 扩展的Jupyter Console版本。该命令的行为与qserver-console类似。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)