我们公司需要用到阿里的办公安全平台SASE,我一直使用Linux办公的,我发现它提供了deb
包,但是我是Manjaro
用户,我将deb
解包后重新打pkg.tag.zst
包,发现这个程序在启动前,必须先执行/usr/local/bin/alisase-bin/3.4.2/alisasesvc --daemon
启动一个守护进程,这行命令启动后有几个特点
1.运行命令后,程序会立刻退出,在后台fork出一个子进程守护运行
2.该进程运行后无法退出,只能通过kill -9 PID
,它不接收其他信号,再就是运行/usr/local/bin/alisase-bin/3.4.2/alisasesvc --uninstall
,但后者会将整个目录删除并卸载
3.由于这是个网络软件,会对本机的网络适配器产生影响,导致部分网段不能使用,会被代理到阿里云内网
我现在的需求是通过systemd
来管理这个后台守护进程,方便我在不需要的时候通过systemctl stop alisase.service
关闭,我现在的alisase.service
长这样
[Unit]
Description=AliSASE Daemon Service
After=network-online.target nftables.service iptables.service
[Service]
Type=simple
ExecStart=/usr/local/bin/alisase-bin/alisased.sh start
ExecStop=/usr/local/bin/alisase-bin/alisased.sh stop
ExecReload=/usr/local/bin/alisase-bin/alisased.sh restart
PIDFile=/run/alisased.pid
KillSignal=SIGKILL
SuccessExitStatus=9
[Install]
WantedBy=multi-user.target
使用到的alisased.sh
是这样
#!/usr/bin/env bash
runDir="/run";
pidFile="${runDir}/alisased.pid";
start() {
if [ ! -d "${runDir}" ]; then
mkdir -p /var/run;
fi
pid=$(pgrep -f alisasesvc);
if [ -z "${pid}" ]; then
/usr/local/bin/alisase-bin/3.4.2/alisasesvc --daemon
pid=$(pgrep -f alisasesvc);
echo "Start alisasesvc with pid ${pid} ."
else
echo "alisasesvc running with ${pid} ."
fi
echo "${pid}" > "${pidFile}";
}
stop() {
if [ -f "${pidFile}" ] && [ -s "${pidFile}" ]; then
pid=$(cat "${pidFile}");
else
pid=$(pgrep -f alisasesvc);
fi
if [ -n "${pid}" ] && ps -p "${pid}" > /dev/null; then
echo "Stop alisasesvc with pid : ${pid} ...";
kill -9 "${pid}";
else
echo "alisasesvc Stopped ${pid} !"
fi
if [ -f "${pidFile}" ]; then
rm "${pidFile}";
fi
}
restart(){
stop
start
}
case "$1" in
"start")
start;
;;
"stop")
stop;
;;
"restart")
restart;
;;
*)
echo "Invalid options .";
exit 1
;;
esac
现在start
、status
正常,但是stop
时,提示使用了-9
信号,引发systemd
错误,但是我这个进程必须使用-9
,没有其他停止方式
与通义千问沟通后逐步尝试,已解决。
1.删除了
alisased.sh
2.更改service文件内容如下
通义千问一周前询问是在胡说八道,这次的建议有用。腾讯元宝和字节豆包一直在一本正经的胡说🤥