COPT计算集群服务

COPT计算集群服务器,COPT Compute Cluster,是一个由杉数求解器提供的,允许用户通过局域网 在服务器端执行优化计算的服务。该服务支持在Windows、Linux和MacOS三大系统下运行。

如果COPT计算集群服务器成功启动,可以对装有适配版本的杉数求解器客户端提供优化计算服务, 不需要客户端具有任何授权文档。也就是说,COPT计算集群客户端可以在本地建模,然后远程求解, 最后交互式地从服务器端获得求解结果。

显然,服务器端同时允许的优化任务数目受限于服务器自己的算力。同时,多台服务器允许组成树状 网络拓扑结构的COPT计算集群,从而实现在服务器端横向拓展集群算力。

服务器端安装说明

COPT计算集群服务器对应的可执行文件是 copt_cluster 。其启动时需要验证具有集群类型的许可文件, 读取服务器运行所需的配置文件 cls.ini ,以及在杉数授权服务器进行远程验证, 例如需要验证服务器IP符合注册信息中要求的IP范围。集群版的许可文件需要通过 copt_licgen 工具和注册后得到的许可凭证,由杉数授权服务器远程自动生成。详情描述如下或者 参考前文 如何申请与配置许可文件

安装步骤

杉数提供的COPT远程服务安装包,包含了COPT计算集群服务器端的程序。用户需先通过客服申请注册并获取 COPT远程服务安装包后,可直接将安装包解压缩并放置于自定义路径下。过程属于绿色安装, 无需配置环境变量,具体安装步骤演示如下:

对于Windows用户

请使用ZIP解压软件将软件解压至任意目录,推荐软件解压缩到 C:\Program Files 目录下。

对于Linux用户

鼠标操作解压缩COPT远程服务安装包,或在终端上输入下述命令解压缩:

tar -xzf CardinalOptimizer-Remote-7.1.1-lnx64.tar.gz

解压缩后在当前目录下得到 copt_remote71 文件夹,用户可以将它移动到其它自定义路径下。 对于Admin用户我们推荐移动到 /opt 目录下,对于非Admin用户可以放在 $HOME 目录下。 即在终端下输入下述命令(以Admin用户为例)

sudo mv copt_remote71 /opt

注意,执行该命令需要 root 权限。

对于MacOS用户

鼠标操作解压缩COPT远程服务安装包,或在终端上输入下述命令解压缩:

tar -xzf CardinalOptimizer-Remote-7.1.1-universal_mac.tar.gz

解压缩后在当前目录下得到 copt_remote71 文件夹,用户可以将它移动到其它自定义路径下。 对于 root 用户我们推荐移动到 /Applications 目录下,对于非 root 用户可以放在 $HOME 目录下。 即在终端下输入下述命令(以 root 用户为例)

mv copt_remote71 /Applications

如果在安装或使用杉数求解器时出现如下错误:

"libcopt.dylib" cannot be opened because the developer cannot be verified.
macOS cannot verify that this app is free from malware.

或者出现类似的动态库签名问题。则使用管理员权限,在终端上执行如下命令,以绕过 MacOS 系统关于动态库的加载检查。

xattr -d com.apple.quarantine CardinalOptimizer-Remote-7.1.1-universal_mac.tar.gz

或者:

xattr -dr com.apple.quarantine /Applications/copt_remote71

许可文件

在成功安装COPT远程服务包后,还需配置集群许可文件。我们推荐把获得的许可文件 license.datlicense.key 放置在COPT远程服务安装路径下的 cluster 目录。

下面讲解在不同系统下,如何通过 copt_licgen 工具和许可凭证信息 key 来获取许可文件。

注意

如果用户已经获取到 license.datlicense.key 这两个授权文档,则无需重复获取了。 可以跳过如下获取许可文件的步骤,直接参阅 配置文件

对于Windows用户

需要打开命令行工具,也就是 cmd 。假如COPT远程服务已安装在 "C:\Program Files" , 在命令行工具窗口输入如下命令后,进入COPT远程服务安装路径下的 cluster 目录:

cd "C:\Program Files\copt_remote71\cluster"

假如用户的许可凭证信息为 7483dff0863ffdae9fff697d3573e8bc , 因为生成许可文件的 copt_licgen 在COPT远程服务安装路径下的 tools 文件夹内, 则可以在命令行工具窗口输入下述命令获取杉数COPT的许可文件 license.datlicense.key

..\tools\copt_licgen -key 7483dff0863ffdae9fff697d3573e8bc

对于Linux和MacOS用户

假如COPT远程服务安装在 "/Applications" 目录下,在终端输入以下命令进入集群服务端 目录(以MacOS系统为例):

cd /Applications/copt_remote71/cluster

假如用户的许可凭证信息为 7483dff0863ffdae9fff697d3573e8bc , 则可以在终端输入下述命令获取杉数COPT的许可文件 license.datlicense.key

../tools/copt_licgen -key 7483dff0863ffdae9fff697d3573e8bc

特别地,如果用户不是在COPT远程服务安装路径下的 cluster 目录下配置的许可文件,建议将 license.datlicense.key 两个许可文件移至此路径下。可手动将这两个文件放到 cluster 目录下,也可以输入下述命令移动这两个许可文件(以MacOS系统为例)。

mv license.* /Application/copt_remote71/cluster

配置文件

COPT计算集群服务器的配置文件 cls.ini ,如下表所示。

[Main]
Port = 7878
# Number of total tokens, what copt jobs can run simutaneously up to.
NumToken = 3
# Password is case-sensitive and default is emtpy;
# It applies to both copt clients and cluster nodes.
PassWd =
# Data folder of cluster relative to its binary folder,
# where multiple versions of copt libraries and related licenses reside.
DataFolder = ./data

[SSL]
# Needed if connecting using SSL/TLS
CaFile =
CertFile =
CertkeyFile =

[Licensing]
# If empty or default license name, it is from binary folder;
# To get license files from cwd, add prefix "./";
# Full path is supported as well.
LicenseFile = license.dat
PubkeyFile = license.key

[Cluster]
# Host name and port of parent node in cluster.
# Default is empty, meaning not connecting to other node.
Parent =
PPort = 7878

[Filter]
# default policy 0 indicates accepting all connections, except for ones in blacklist
# otherwise, denying all connections except for ones in whitelist
DefaultPolicy = 0
UseBlackList = true
UseWhiteList = true
FilterListFile = clsfilters.ini

这里,配置文件可以设置集群服务器连接端口,客户端需要连接这个端口才能通讯和获得服务。 用户可以通过 NumToken = 3 来设置COPT计算集群服务器同时允许的优化任务数目,这个数目可以 按本服务器的算力来估算。连接密码可以通过 PassWd 来改变,默认是空,即表示客户连接 不需要设定密码。更安全的连接方式是下面 SSL 部分,用户可以通过RSA证书来加密通讯内容。

COPT计算集群服务器可以预先安装多个版本的COPT求解器,只有COPT版本匹配的客户才会被批准。服务器端安装的 COPT求解器所在路径则由 DataFolder 设定。COPT计算集群服务预装了和服务器程序版本匹配的COPT求解器, 用户可以参照着来设置需要的不同版本。

比如,如果集群服务器端预安装版本号为v7.1.1的COPT求解器,还想安装版本为 v4.0.7的COPT求解器,只需要将COPT v4.0.7的C算法库,放到 DataFolder 的子目录 ./data/copt/4.0.7/即可。并且这个安装过程不需要重启服务器。具体地说,以Linux平台为例, 就是从COPT v4.0.7的安装目录 $COPT_HOME/lib/ 复制 libcopt.so 到集群服务器程序的子目录./data/copt/4.0.7/。

值得注意的是,如果集群服务器的版本是v7.1.1,但用户想安装更新的COPT求解器, 比如COPT v7.5.0求解器,也是允许的。 这时候,除了需要把COPT v7.5.0的C算法库放入./data/copt/7.5.0/,还 需要对应的单机版授权文档才能加载COPT v7.5.0求解器,所以再复制一份v7.5.0的单机授权文档到子目录 ./data/copt/7.5.0/。当然如果杉数求解器有重大改动,上述简单安装的方式可能不可行,那么用户需要升级 集群服务器到最新版本才可以。

以下示例是Linux系统里的集群服务器的安装目录结构,假设支持三个版本的COPT求解器,默认的v7.1.1, 旧版本v4.0.7, 和新版本v7.5.0。

~/copt_remote71/cluster
|  cls.ini
|  copt_cluster
|  license.dat -> cluster license v7.1.1
|  license.key
|
|_ data
    |_ copt
        |_ 4.0.7
            libcopt.so
        |_ 7.1.1
            libcopt.so
        |_ 7.5.0
            libcopt.so
            license.dat -> license v7.5.0
            license.key

在下面 Licensing 部分,配置文件需要设定授权文档的读取路径。就如上面注释描述的,空缺或者 默认的授权文档名表示COPT计算集群服务器从可执行文件所在目录下读取授权文档。

如果用户在当前目录下启动集群服务器,并且许可文件也在当前目录下,通过修改 LicenseFile = ./license.datPubkeyFile = ./license.key ,可以让COPT计算集群服务器 从当前目录读取授权文档。

我们知道杉数求解器还允许客户通过环境变量 COPT_LICENSE_DIR 设置授权文档所在的路径。 详情可参考 如何安装杉数求解器 。在这种情况下,需要修改 配置文件为完整的环境变量路径,COPT计算集群服务器才能读取环境变量下的授权文档。

Cluster 部分,用户可以设定连接的父节点(IP和端口),本服务器可以通过这个设置来加入到 父节点所在的集群中去。

最后是 Filter 部分, DefaultPolicy 默认设为0,表示除了在黑名单里的用户, 其他均允许连接到本授权服务器;反之,除了在白名单中的用户,其他设备均无法连接到本授权服务器。 UseBlackListTrue 表示使用黑名单列表, UseWhiteListTrue 表示使用白名单列表。 FilterListFile 表示集群服务器过滤配置文件名为 clsfilters.ini 。其格式举例如下:

[BlackList]
# 127.0.*.* + user@machine*

[WhiteList]
# 127.0.1.2/16 - user@machine*

[ToolList]
# only tool client at server side can access by default
127.0.0.1/32

BlackListWhiteList 表示可添加规则到黑名单以及白名单里。 规则的格式是以IP地址开头,这里IP可以用通配符匹配,或者固定位数的方式。 另外,IP地址后面还可以包括(+)或者排除(-)给定用户名和给定机器名。 其中用户名 user 是指 username ,MacOS/Linux系统用户可以在终端通过命令 whoami 来查询;机器名 machine 是指 hostname , MacOS/Linux系统用户可以在终端通过命令 hostname 来查询。 ToolList 是对工具使用者的访问限制,添加相关IP地址表示允许此远程机器访问。 需注意的是,配置文件 clsfilters.ini 更改之后,可使用 ResetFilters 命令 把当前的规则重置为过滤配置文档里的规则。也可使用 WriteFilters 命令 把当前的规则输出到过滤配置文档。

使用示例

如果正确的集群版授权文档安装在集群服务器可执行文件所在的目录下,要启动COPT计算集群 服务器,只需在Windows的命令行或者Linux和MacOS的终端中输入下述命令:

copt_cluster

若屏幕输出如下,则表示成功启动集群服务器, 启动后会监视和管理客户端的申请。 如果用户输入字符 Q ,则集群服务器会关闭退出。

> copt_cluster
  [ Info] start COPT Compute Cluster, v7.1.1 20240304
  [ Info] [NODE] node has been initialized
  [ Info] server started at port 7878

如果本地集群版授权文档验证不通过,或者远程杉数授权服务器连接错误,则可能出现如下输出。

> copt_cluster
  [ Info] start COPT Compute Cluster, v7.1.1 20240304
  [Error] Invalid signature in public key file
  [Error] Fail to verify local license

> copt_cluster
  [ Info] start COPT Compute Cluster, v7.1.1 20240304
  [Error] Error to connect license server
  [Error] Fail to verify cluster license by server

客户端使用说明

COPT计算集群客户端可以是COPT命令行交互工具,或者通过接口调用杉数求解器动态库的方式,比如COPT Python接口。 如果客户没有任何单机许可,那么集群许可是一种更灵活的替代方式。所有使用COPT的客户端都可以 通过集群服务器来合法使用杉数求解器。

安装和配置

首先用户需要确保已在客户端正确安装杉数求解器,详情可参考 如何安装杉数求解器。 成功安装COPT客户端后,用户不需要配置本地的许可文件,但需要配置COPT计算集群客户端的配置文件 client.ini,如下表所示。

Cluster = 192.168.1.11
Port = 7878
QueueTime = 600
Passwd =

上述配置文件表示客户端会尝试和 192.168.1.11:7878 连接,且排队等待时间最多为600秒。 这里,如果 Cluster 内容空缺,默认设为 localhostQueueTime 或者 WaitTime 空缺则认为是0, 即如果集群服务器的Token数目已经被占满就不等待,直接错误退出。 Port 如果空缺,则设为默认的7878,但要确保和 集群服务器的配置文件里设的端口一致。注意客户端配置文件中的关键词是并不区分大小写。

使用COPT计算集群服务的前提是客户端首先发现的是配置文本文件 client.ini ,而不是本地许可文件。但和寻找本地 许可文件的途径一样,客户端会从当前目录,环境变量目录 COPT_LICENSE_DIR 和客户端可执行文件 所在目录,依次查看是否有连接服务器的配置文件 client.ini 。所以,如果用户想使用COPT计算集群服务, 需要确保COPT客户端优先找到的是配置文件,而不是本地授权许可(如果有的话)。 比如,用户已经在环境目录下有了本地许可,那么用户还可以在当前目录(不同于环境目录)下,建立 配置文件 client.ini 来优先使用集群服务的方式。

如果是调用杉数求解器动态库方式,比如COPT Python接口,在建模中创建COPT优化求解环境时, 会按照配置文件 client.ini 的设置,从集群服务器获取求解服务。 这里,每个COPT求解环境对象需要建立和集群服务器的连接并占用一个Token, 建模结束后释放COPT求解环境对象时,会通知服务器释放占用的Token。

使用示例

假如用户在当前目录下创建了客户端配置文件 client.ini (同时没有本地许可文件), 下面以交互式命令行工具 copt_cmd 为例,演示如何建立与集群服务器的连接。首先, 在Windows的命令行或者Linux和MacOS的终端中输入下述命令:

copt_cmd

若屏幕输出如下,则表示客户端成功连接到集群服务器,可以在本地建模,然后远程求解。

> copt_cmd
  Cardinal Optimizer v7.1.1. Build date Mar 04 2024
  Copyright Cardinal Operations 2024. All Rights Reserved

  [ Info] initialize cluster client with ./client.ini

  [ Info] wait for server in 0 / 39 secs
  [ Info] connecting to cluster server 192.168.1.11:7878
COPT>

若屏幕输出如下,则表示客户端连接到集群服务器,但由于Token数目有限,需要排队等待。

> copt_cmd
  Cardinal Optimizer v7.1.1. Build date Mar 04 2024
  Copyright Cardinal Operations 2024. All Rights Reserved

  [ Info] initialize cluster client with ./client.ini

  [ Info] wait for server in 0 / 39 secs
  [ Info] connecting to cluster server 192.168.1.11:7878

  [ Warn] wait in queue of size 5
  [ Info] wait for license in  2 / 39 secs
  [ Info] wait for license in  4 / 39 secs
  [ Info] wait for license in  6 / 39 secs
  [ Info] wait for license in  8 / 39 secs
  [ Info] wait for license in 10 / 39 secs
  [ Info] wait for license in 20 / 39 secs
  [ Info] wait for license in 30 / 39 secs
  [Error] timeout at waiting for server approval
  [Error] Fail to initialize copt command-line tool

若屏幕输出如下,则表示客户端连接到集群服务器,但用户拒绝排队等待。然后客户端立即返回错误后退出。

> copt_cmd
  Cardinal Optimizer v7.1.1. Build date Mar 04 2024
  Copyright Cardinal Operations 2024. All Rights Reserved

  [ Info] initialize cluster client with ./client.ini

  [ Info] wait for server in 0 / 9 secs
  [ Info] connecting to cluster server 192.168.1.11:7878
  [ Warn] server error: "no more token available", code = 129
  [Error] Fail to initialize copt command-line tool

若屏幕输出如下,则表示客户端无法连接集群服务器,超时后退出。

> copt_cmd
  Cardinal Optimizer v7.1.1. Build date Mar 04 2024
  Copyright Cardinal Operations 2024. All Rights Reserved

  [ Info] initialize cluster client with ./client.ini

  [ Info] wait for server in 0 / 39 secs
  [ Info] connecting to cluster server 192.168.1.11:7878
  [ Info] wait for license in  2 / 39 secs
  [ Info] wait for license in  4 / 39 secs
  [ Info] wait for license in  6 / 39 secs
  [ Info] wait for license in  8 / 39 secs
  [ Info] wait for license in 10 / 39 secs
  [ Info] wait for license in 20 / 39 secs
  [ Info] wait for license in 30 / 39 secs
  [Error] timeout at waiting for server approval
  [Error] Fail to initialize copt command-line tool

集群服务器管理工具

COPT计算集群服务器同时提供了一个对服务器端进行管理的工具 copt_clstool , 用来查看集群服务器的配置信息,并且具有在线修改的功能。

工具说明

在Windows的命令行或者Linux和MacOS的终端中输入下述命令:

> copt_clstool

屏幕输出如下:

> copt_clstool
  COPT Cluster Managing Tool

  copt_clstool [-s server ip] [-p port] [-x passwd] command <param>

  commands are:   addblackrule <127.0.0.1/20[-user@machine]>
                  addwhiterule <127.0.*.*[+user@machine]>
                  getfilters
                  getinfo
                  getnodes
                  reload
                  resetfilters
                  setparent <xxx:7878>
                  setpasswd <xxx>
                  settoken  <num>
                  toggleblackrule <n-th>
                  togglewhiterule <n-th>
                  writefilters

上面是这个工具的使用格式说明。用户通过 -s-p 来设置目标服务器的IP地址和端口。 如果不写,则默认是本地服务器和端口7878。如果服务器设置了非空密码,那么需要通过 -x 来设置密码 后才能成功连接。

这个工具提供的命令包括:

  • AddBlackRule: 添加一个规则到黑名单里。规则的格式是以IP地址开头,这里IP可以用通配符匹配,或者固定位数的方式。 另外,IP地址后面还可以包括(+)或者排除(-)给定用户名和给定机器名。

  • AddWhiteRule: 添加一个规则到白名单里。白名单规则的格式和黑名单一样。

  • GetFilters: 获取当前所有规则,包括黑名单,白名单以及关于工具的。每个规则前面有个序号,用来作为命令 ToggleBlackRuleToggleWhiteRule 的参数。

  • GetInfo: 获取服务器的基本信息,包括Token占用数和总数,连接的客户,以及支持的COPT版本号。

  • GetNodes: 获取服务器作为集群节点的连接信息,包括父节点和子节点。

  • Reload: 动态更新当前服务器的所有子节点的占用情况。在发生占用数据不一致的情形时,手动更新保持一致。

  • ResetFilters: 把当前的规则重置为过滤配置文档里的规则。

  • SetParent: 动态更新当前服务器的父节点并连接。调整网络结构时避免等待客户端任务的结束。

  • SetPasswd: 动态更新当前服务器的连接密码。

  • SetToken: 动态更新当前服务器的Token数。

  • ToggleBlackRule: 激活或者禁止一条黑名单规则,用从 GetFilters 获取的序列号作为参数。

  • ToggleWhiteRule: 激活或者禁止一条白名单规则,用从 GetFilters 获取的序列号作为参数。

  • WriteFilters: 把当前的规则输出到过滤配置文档。

使用示例

下面的命令列出了服务器为 192.168.1.11 的基本信息。

> copt_clstool -s 192.168.1.11 GetInfo

[ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7878
[ Info] [command] wait for connecting to cluster
[ Info] [cluster] general info
  # of available tokens is 3 / 3, queue size is 0
  # of active clients is 0
  # of installed COPT versions is 1
    COPT v7.1.1

下面的命令列出了服务器为 192.168.1.11 的集群连接信息。

> copt_clstool -s 192.168.1.11 GetNodes

[ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7878
[ Info] [command] wait for connecting to cluster
[ Info] [cluster] node info
  [Parent] (null):7878 (Lost)
  [Child] Node_192.168.1.12:7878_N0001, v2.0=3
  Total num of child nodes is 1

下面的命令把服务器为 192.168.1.11 的Token数目从原来的3,在线修改为目前的0。

> copt_clstool -s 192.168.1.11 SetToken 0

[ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7878
[ Info] [command] wait for connecting to cluster
[ Info] [cluster] total token was 3 and now set to 0

下面的命令列出了服务器为 192.168.1.11 的所有过滤规则,包括黑名单,白名单以及关于工具的规则。

> copt_clstool -s 192.168.1.11 GetFilters

[ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7979
[ Info] [command] wait for connecting to cluster
[ Info] [cluster] filters info
[BlackList]

[WhiteList]

[ToolList]
  [1]  127.0.0.1

下面的命令演示了把IP地址为 192.168.3.133 用户加入到黑名单中。

> copt_clstool -s 192.168.1.11 AddBlackRule 192.168.3.133

[ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7979
[ Info] [command] wait for connecting to cluster
[ Info] [cluster] server added new black rule (succeeded)

此时 GetFilters 可得到本服务器的过滤规则,可以看到已经发生了改变。

> copt_clstool -s 192.168.1.11 GetFilters

[ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7979
[ Info] [command] wait for connecting to cluster
[ Info] [cluster] filters info
[BlackList]
  [1] 192.168.3.133

[WhiteList]

[ToolList]
  [1]  127.0.0.1

下面的命令演示了切换黑名单规则,把 192.168.3.133 从黑名单中去掉。

> copt_clstool -s 192.168.1.11 ToggleBlackRule 1

[ Info] COPT Cluster Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7979
[ Info] [command] wait for connecting to cluster
[ Info] [cluster] server toggle black rule [1] (succeeded)

服务方式启动

以系统服务的方式启动集群服务器,配置文件以 copt_cluster.service 为例,可通过查看 cluster 文件夹下的 readme.txt 来进行配置和操作。 readme.txt 中显示如下,分别列出了Linux和MacOS系统下的操作方式:

[Linux] To run copt_cluster as a service with systemd

Add a systemd file
    copy copt_cluster.service to /lib/systemd/system/
    sudo systemctl daemon-reload

Enable new service
    sudo systemctl start copt_cluster.service
    or
    sudo systemctl enable copt_cluster.service

Restart service
    sudo systemctl restart copt_cluster.service

Stop service
    sudo systemctl stop copt_cluster.service
    or
    sudo systemctl disable copt_cluster.service

Verify service is running
    sudo systemctl status copt_cluster.service

[MacOS] To run copt_cluster as a service with launchctrl

Add a plist file
    copy copt_cluster.plist to /Library/LaunchAgents as current user
    or
    copy copt_cluster.plist to /Library/LaunchDaemons with the key 'UserName'

Enable new service
    sudo launchctl load -w /Library/LaunchAgents/copt_cluster.plist
    or
    sudo launchctl load -w /Library/LaunchDaemons/copt_cluster.plist

Stop service
    sudo launchctl unload -w /Library/LaunchAgents/copt_cluster.plist
    or
    sudo launchctl unload -w /Library/LaunchDaemons/copt_cluster.plist

Verify service is running
    sudo launchctl list shanshu.copt.cluster

Linux系统

下面以Linux系统为例,演示通过系统服务方式启动集群服务器。打开终端,输入以下命令进入集群服务所在路径 (以COPT远程服务安装在 home 目录下的 eleven 路径为例)。

cd /home/eleven/copt_remote71/cluster

通过任意文本文件打开系统服务的配置文件 copt_cluster.service ,内容如下所示:

[Unit]
Description=COPT Cluster Server

[Service]
WorkingDirectory=/path/to/service
ExecStart=/path/to/service/copt_cluster
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

将路径修改为 copt_cluster 所在的实际路径,修改之后 copt_cluster.service 内容显示如下:

[Unit]
Description=COPT Cluster Server

[Service]
WorkingDirectory=/home/eleven/copt_remote71/cluster
ExecStart=/home/eleven/copt_remote71/cluster/copt_cluster
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

copt_cluster.service 文件复制到 /lib/systemd/system/ 路径下,命令如下:

sudo cp copt_cluster.service /lib/systemd/system/

初次启动系统服务,需要更新系统配置(之后再启动时无需更新),命令如下:

sudo systemctl daemon-reload

启动系统服务,命令如下:

sudo systemctl start copt_cluster.service

输入如下命令来验证下系统服务是否在运行:

sudo systemctl status copt_cluster.service

输入之后显示如下,表示集群服务器系统服务已启动:

copt_cluster.service - COPT Cluster Server
Loaded: loaded (/lib/systemd/system/copt_cluster.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-08-28 11:46:10 CST; 3s ago
Main PID: 3054 (copt_cluster)
    Tasks: 6 (limit: 4915)
CGroup: /system.slice/copt_cluster.service
          └─3054 /home/eleven/copt_remote71/cluster/copt_cluster

eleven-ubuntu systemd[1]: Started COPT Cluster Server.
eleven-ubuntu COPTCLS[3054]: LWS: 4.1.4-b2011a00, loglevel 1039
eleven-ubuntu COPTCLS[3054]: NET CLI SRV H1 H2 WS IPv6-absent
eleven-ubuntu COPTCLS[3054]: server started at port 7878
eleven-ubuntu COPTCLS[3054]: LWS: 4.1.4-b2011a00, loglevel 1039
eleven-ubuntu COPTCLS[3054]: NET CLI SRV H1 H2 WS IPv6-absent
eleven-ubuntu COPTCLS[3054]: [NODE] node has been initialized

若要停止集群服务器系统服务,则输入以下命令:

sudo systemctl stop copt_cluster.service

MacOS系统

下面以MacOS系统为例,演示通过系统服务方式启动集群服务器。打开终端,输入以下命令进入集群服务所在路径 (以COPT远程服务安装在 "/Applications" 路径为例)。

cd /Applications/copt_remote71/cluster

通过任意文本文件打开系统服务的配置文件 copt_cluster.plist ,内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>shanshu.copt.cluster</string>
        <key>Program</key>
        <string>/path/to/service/copt_cluster</string>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
    </dict>
</plist>

将路径修改为 copt_cluster 所在的实际路径,修改之后 copt_cluster.plist 内容显示如下:

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>shanshu.copt.cluster</string>
        <key>Program</key>
        <string>/Applications/copt_remote71/cluster/copt_cluster</string>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
    </dict>
</plist>

copt_cluster.plist 文件复制到 /Library/LaunchAgents 路径下,命令如下:

sudo cp copt_cluster.plist /Library/LaunchAgents

启动系统服务,命令如下:

sudo launchctl load -w /Library/LaunchAgents/copt_cluster.plist

输入如下命令来验证下系统服务是否在运行:

sudo launchctl list shanshu.copt.cluster

输入之后显示如下,表示集群服务器系统服务已启动:

{
    "LimitLoadToSessionType" = "System";
    "Label" = "shanshu.copt.cluster";
    "OnDemand" = false;
    "LastExitStatus" = 0;
    "PID" = 16406;
    "Program" = "/Applications/copt_remote71/cluster/copt_cluster";
};

若要停止集群服务器系统服务,则输入以下命令:

sudo launchctl unload -w /Library/LaunchAgents/copt_cluster.plist

若是需要指定此设备下的某一用户才有权限启动集群服务器系统服务,则需要将 UserName 添加到 copt_cluster.plist 中,以 UserNameeleven 为例,添加之后 copt_cluster.plist 内容显示如下:

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>shanshu.copt.cluster</string>
        <key>Program</key>
        <string>/Applications/copt_remote71/cluster/copt_cluster</string>
        <key>UserName</key>
        <string>eleven</string>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
    </dict>
</plist>

将添加 UserName 后的 copt_cluster.plist 文件复制到 /Library/LaunchDaemons 路径下,命令如下:

sudo cp copt_cluster.plist /Library/LaunchDaemons

启动系统服务,命令如下:

sudo launchctl load -w /Library/LaunchDaemons/copt_cluster.plist

若要停止集群服务器系统服务,则输入以下命令:

sudo launchctl unload -w /Library/LaunchDaemons/copt_cluster.plist