systemctl重新启动

2020-08-23 14:24发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的Linux/SAP专家

无论何时执行命令systemctl reboot-第一步,它都会杀死所有SAP进程。

稍后会运行sapinit服务以从/etc/init.d位置启动SAP。

下面是我的要求,并尝试了几种选择,但没有一个起作用。

我需要使用sapstop命令或sapinit stop命令通过服务或嵌入到现有脚本中来关闭SAP进程,而不是使用Reboot命令杀死SAP进程。 有什么办法可以做到这一点?

注意:我在/etc/systemd/system或/usr/lib/systemd/system_shutdown或/usr/lib/systemd/system下创建了新服务,以在重启命令终止进程之前停止SAP并停止运行,原因是 reboot命令在到达我的服务/脚本之前已经杀死了SAP进程。

有什么想法或建议吗?

我们将不胜感激。

感谢和问候,

KK

[Unit]说明=关闭之前

DefaultDependencies =否

RequiresMountsFor =/usr/sap/home/sapmnt/

在= shutdown.target后重新启动.target网络。服务

[服务] KillUserProcesses =否

KillMode = none

SendSIGKILL =否

RemainAfterExit =是

TimeoutStopSec = 5分钟

TimeoutSec = 5分钟

Type = oneshot

ExecStart =/usr/lib/systemd/system-shutdown/NFGsapstop

[安装]

WantedBy =关闭。目标重启。目标多用户。目标网络。目标

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的Linux/SAP专家

无论何时执行命令systemctl reboot-第一步,它都会杀死所有SAP进程。

稍后会运行sapinit服务以从/etc/init.d位置启动SAP。

下面是我的要求,并尝试了几种选择,但没有一个起作用。

我需要使用sapstop命令或sapinit stop命令通过服务或嵌入到现有脚本中来关闭SAP进程,而不是使用Reboot命令杀死SAP进程。 有什么办法可以做到这一点?

注意:我在/etc/systemd/system或/usr/lib/systemd/system_shutdown或/usr/lib/systemd/system下创建了新服务,以在重启命令终止进程之前停止SAP并停止运行,原因是 reboot命令在到达我的服务/脚本之前已经杀死了SAP进程。

有什么想法或建议吗?

我们将不胜感激。

感谢和问候,

KK

[Unit]说明=关闭之前

DefaultDependencies =否

RequiresMountsFor =/usr/sap/home/sapmnt/

在= shutdown.target后重新启动.target网络。服务

[服务] KillUserProcesses =否

KillMode = none

SendSIGKILL =否

RemainAfterExit =是

TimeoutStopSec = 5分钟

TimeoutSec = 5分钟

Type = oneshot

ExecStart =/usr/lib/systemd/system-shutdown/NFGsapstop

[安装]

WantedBy =关闭。目标重启。目标多用户。目标网络。目标

付费偷看设置
发送
4条回答
愤怒的猪头君
1楼-- · 2020-08-23 14:52

我遇到了完全相同的问题,最终找到了解决方案。 在用户片之外启动sapstartsrv。 然后,由它启动的进程不再属于用户片,因此不会在关闭时立即终止。

我实现此目标的方式是拥有以 adm用户(.service文件中的User = adm)运行的系统服务。 如果该服务正在运行,它将重新启动sapstartsrv,从而使该进程现在成为此系统服务的cgroup的一部分。 sapstartsrv启动的所有进程最终都属于同一cgroup。

您还可以使用此方法将所有sapstartsrv进程更改为系统片,尽管我认为最好将它们放在更有用的位置,例如您自己的停止/启动服务:

 for $(pidof sapstartsrv)中的pid; 做
   echo $ pid>/sys/fs/cgroup/systemd/system.slice/cgroup.procs
 做完了
 
Climb_Ma
2楼-- · 2020-08-23 14:40

亲爱的戴尔威尔逊,

您在system.slice级别上将processid回显到cgroup.procs的方法运行良好,并获得了预期的结果。

应在重新启动开始之前提前完成processid的回显,我们将所有SAP进程ID手动回显到cgroup.procs以上,然后尝试重新启动命令-重启命令使用sapinit脚本正常停止了SAP进程,而不会终止任何 程序。

问题:

1。 如何使用新ID在系统级别自动执行cgroup.procs文件? 重新启动后,现在所有SAP进程都有新的proc ID。

2。 我不理解您在.service文件中添加User = adm的其他选择。 您在这里谈论/etc/services吗?

您要引用的.service文件在哪里

感谢和问候,

KK

歪着头看世界
3楼-- · 2020-08-23 14:36

嗨,坎南,

这是SAP支持人员针对同一问题的答案。

顺便说一句,它对我们没有用。

请尝试发布您的结果

"带有系统的sapinit脚本(及其启动的进程)位于用户切片中。通常,系统在杀死进程之前只允许90秒停止这些进程。

SUSE为这种情况提供了一种解决方法: https://www.suse.com/de-de/support/kb/doc/?id=7022671

KBA是在HA群集的上下文中描述的,但是它也可以以相同的方式应用于独立系统。 我建议您先在测试环境中尝试一下。"

谢谢

Moti

SAP浪
4楼-- · 2020-08-23 14:51

尊敬的Moti,

我们有Red Hat RHEL 7版本,您的解决方案也适用于我们。 我唯一的问题是在下面

该解决方案是否是RHEL7的受支持解决方案? 另外,我需要彻底测试这种情况,以便看不到其他影响。

感谢您的建议。

KK

一周热门 更多>