我正在调试 systemd 关闭问题。这里的问题是一些文件系统在服务仍在运行时被卸载。
一般来说,我们希望systemd先关闭服务,然后卸载挂载点。
但在这里,卸载和停止服务是并行发生的。(见下文)。首先还要卸载根文件系统。
# Unmounting /root...
Unmounting /var/lib/ntp...
Unmounting /etc/cron.d/local...
[ OK ] Stopped Apply Kernel Variables.
Unmounting /proc/fs/nfsd...
Unmounting /tmp/rshell/trace...
Stopping Availability of block devices...
Unmounting /etc/timestamp...
Unmounting /var/lib/nfs/rpc_pipefs...
Unmounting /etc/sysconfig/clock...
[ OK ] Removed slice system-getty.slice.
[ OK ] Stopped Load Kernel Modules.
Unmounting /etc/ssh/ssh_external_host_rsa_key...
[ OK ] Stopped Create Static Device Nodes in /dev.
Unmounting /mnt/log...
[ OK ] Stopped Resets System Activity Logs.
Stopping Crond Periodic Command Scheduler...
[ OK ] Stopped Mount Restricted …
Run Code Online (Sandbox Code Playgroud) 出于性能原因,我需要运行应用程序的多个实例,固定到CPU,监听不同的端口.HAProxy TCP负载均衡器位于它们前面以分配流量.
这样做是为了防止任何线程上下文切换并强制执行无共享设计(因此在应用程序中不需要任何类型的锁,假设它是单线程的).
这意味着在具有64个CPU的服务器上,我可能将HAProxy固定到CPU 0,然后将我的应用程序的63个实例分别固定到单独的CPU(1-63).
显然,在启动,重启,关闭等方面进行管理非常复杂.
我想知道是否有任何方法可以使用systemd为我处理这种复杂性.
我知道,如果我将HAProxy定义为一个单元然后声明它需要与之交谈的其他应用程序,它可以解决启动问题,例如
Require=app1,app2,.....,app63
Run Code Online (Sandbox Code Playgroud)
我可以
systemctl start myhaproxy
Run Code Online (Sandbox Code Playgroud)
它首先会启动它需要的63个实例(假设它们在应用程序安装期间被定义为一个单独的系统单元).
但是,我想知道是否还有我可以让它也适用于重启和关机.
所以,如果我这样做:
systemctl stop myhaproxy
Run Code Online (Sandbox Code Playgroud)
我希望它自动关闭它所谈到的应用程序的所有63个实例.
如果我这样做
systemctl restart myhaproxy
Run Code Online (Sandbox Code Playgroud)
然后我希望它首先重新启动Require中列出的所有服务,然后再重新启动它自己.
那可能吗?或者这超出了systemd可以提供的范围?