程序processA
是一种Linux服务,由“ systemctl start processA
”启动。
此过程将调用std::system
来运行Shell脚本以升级软件。
该脚本将运行“ systemctl
”以先停止processA
,然后替换一些可执行文件,最后重新启动processA
。
问题在于,当执行“ systemctl stop processA
”时,脚本也会终止。
如何解决?
我试图在终端中运行脚本文件;有用。因此脚本没有问题。
//this is how the script is called
int rs = std::system("/usr/bin/update_server.sh upgrade \"/tmp/firmware\" > \"/tmp/upgrade.log\" 2>&1");
答案 0 :(得分:0)
systemd还将杀死子进程(毕竟,这通常是需要的),因此您无法从该服务进行升级。
但是,您可以创建oneshot service来升级与主服务冲突的二进制文件。要升级,请停止该服务,运行升级服务,然后再次启动该服务。