我们公司需要用到阿里的办公安全平台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
,没有其他停止方式
systemd 也是支持fork子进程的,完全可以把aliased.sh去掉,类似这样:
[Unit]
Description=AliSASE Daemon Service
After=network-online.target nftables.service iptables.service
[Service]
Type=forking
ExecStart=/usr/local/bin/alisase-bin/3.4.2/alisasesvc --daemon
KillMode=mixed
[Install]
WantedBy=multi-user.target
上面的配置按理说应该可以直接用,当执行stop的时候,systemd会给子进程发送-9结束信号,和你的脚本实现的是一样的功能。
我写了下面的代码- 在中 workflow.py- 和 但我犯了一个错误- FileWatcherSystemd.Service-FileChangeService loaded:loaded(/lib/systemd/system/FileWatcherSystemd.Service;enabled;vendor Preset:enabled)Active:inactive(dead)(结果:e
我有一个Terraform用来管理我的云资源的服务帐户,我们称之为。我需要给予它足够的访问权限来创建/删除/编辑其他服务帐户,但不能更改它自己或项目中不应该接触的其他SAs。 我试着在那里添加一个条件,但看起来‘服务帐户’不是可以在条件(?)中使用的资源类型之一。下面是绑定该角色的HCL片段(我使用Terraform的事实与此无关): 当我删除该条件时,一切正常,但的权限远远超过它所需的权限。它甚
postgres不知道在哪里可以找到服务器配置文件。 必须指定--config-file或-d调用选项或设置PGDATA环境变量。 因此,我尝试设置配置文件: 我得到以下错误: 我搜索了这个错误消息,但找不到解决方案。 有人能对此提供一些见解吗?
问题内容: 我目前正在使用在Oreo中崩溃的startWakefulService函数。我意识到我要么必须切换到startForegroundService()并使用前台服务,要么切换到JobIntentService,但是基于下面的代码,我不确定该怎么做。(对不起,我是android新手)。正确方向的任何观点将不胜感激。 这是在Android 8.x上运行时遇到的当前错误 致命异常:java.l
这是在Android8.x上运行时出现的当前错误 致命异常:java.lang.RuntimeException无法启动接收方com.heyjude.heyjudeapp.gcm.gcmbroadcastreceiver:java.lang.illegalstateException:不允许启动服务意图{act=com.google.android.c2dm.Intent.receive flg=
假设我的OpenAPI定义有两个服务器。两者共享相同的变量。因此,我想引用这些变量来防止重复代码。 是否可以引用服务器变量或以另一种方式重用它们? 当然,我可以运行,但我不想使用它。