RHEL 7 как запустить давний скрипт перед выключением / перезагрузкой systemd

Я пытаюсь найти решение, как запустить скрипт перед запуском / перезагрузкой в ​​RedHat7. Мне нужно правильно закрыть базу данных SAP, когда я отбрасываю или перезагружаю сервер.

Скрипт для выключения SAP занимает 3-4 минуты, но остановка системы очень быстрая – это означает, что RedHat убивает все процессы imediatly …

мой

systemd sap.service:

[Unit] Description=Shutdown SAP Before=shutdown.target reboot.target halt.target [Service] ExecStart=/bin/true ExecStop=/usr/sap/stopsap RemainAfterExit=true KillMode=none [Install] WantedBy=multi-user.target 

Как я вижу в журнале shutdown – база данных не была закрыта правильно:

 Checking ADA Database ------------------------------------------- setTrace: false J2EE Database is not available 

Вы можете мне помочь?

спасибо

Иво

Редактировать 21.10.2015:

Я перешел к следующему шагу – он работает лучше, но все еще не правильно:

[Unit] Description=SAP sluzba After=network.target sshd.target Wants=network.target sshd.service [Service] Type=simple RemainAfterExit=true Environment="SAPSYSTEMNAME=RH7" "HOST=cz-brn1-rh7" "HOME=/home/rh7adm" "PATH=/sapdb/clients/RH7/bin:/sapdb/programs/bin:/usr/lib64/qt-.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/sap/RH7/SYS/exe/uc/linuxx86_64:/usr/sap/RH7/SYS/exe/run:/home/rh7adm:." "DIR_LIBRARY=/usr/sap/RH7/SYS/exe/run" "LD_LIBRARY_PATH=/usr/sap/RH7/SYS/exe/run:/usr/sap/RH7/SYS/exe/uc/linuxx86_64:/sapdb/clients/RH7/lib" "RSEC_SSFS_DATAPATH=/usr/sap/RH7/SYS/global/security/rsecssfs/data" "RSEC_SSFS_KEYPATH=/usr/sap/RH7/SYS/global/security/rsecssfs/key" KillMode=none SendSIGKILL=no TimeoutSec=5min TimeoutStopSec=5min User=rh7adm Group=sapsys ExecStart=/usr/sap/startsap ExecStop=/usr/sap/stopsap
[Install] WantedBy=graphical.target

Вот сценарий stopsap:

#!/bin/bash date >> /usr/sap/stopsap.log; /usr/sap/RH7/SYS/exe/uc/linuxx86_64/stopsap >> /usr/sap/stopsap.log 2>&1; whoami >> /usr/sap/stopsap.log;

J2EE Database is running See logfile /home/rh7adm/JdbcCon.log stopping the SAP instance J28 Shutdown-Log is written to /home/rh7adm/stopsap_J28.log /usr/sap/RH7/J28/exe/sapcontrol -prot NI_HTTP -nr 28 -function Stop Instance on host cz-brn1-rh7 stopped Waiting for cleanup of resources..................................................................................................................................................

и вот он застрял в течение 5 минут .. Завершение сценария никогда не заканчивается 🙁

Могу ли я проследить, как прошло закрытие моего сока. оказание услуг?

Спасибо..

Попробуйте изменить значение TimeoutStopSec в файле устройства. Значение по умолчанию устанавливается /etc/systemd/system.conf в записи DefaultTimeoutStopSec (моя система имеет значение 90 DefaultTimeoutStopSec ). Вы можете установить TimeoutStopSec=0 чтобы полностью отключить таймаут (может повесить ваше завершение, если сценарий не завершен), или передать большее значение, которое позволяет сценарию остановки полностью закончить.

Проблема была в среде:

правильное определение sap.service:

[Unit] Description=SAP sluzba After=network.target sshd.target Wants=network.target sshd.service [Service] Type=simple RemainAfterExit=true Environment="HOSTNAME=cz-brn1-rh7" "SAPSYSTEMNAME=RH7" "HOST=cz-brn1-rh7" HOME=/home/rh7adm" PATH=/sapdb/clients/RH7/bin:/sapdb/programs/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/sap/RH7/SYS/exe/uc/linuxx86_64:/usr/sap/RH7/SYS/exe/run:/home/rh7adm:." "DIR_LIBRARY=/usr/sap/RH7/SYS/exe/run" "LD_LIBRARY_PATH=/usr/sap/RH7/SYS/exe/run:/usr/sap/RH7/SYS/exe/uc/linuxx86_64:/sapdb/clients/RH7/lib" "RSEC_SSFS_DATAPATH=/usr/sap/RH7/SYS/global/security/rsecssfs/data" "RSEC_SSFS_KEYPATH=/usr/sap/RH7/SYS/global/security/rsecssfs/key" KillMode=none SendSIGKILL=no TimeoutSec=5min TimeoutStopSec=5min User=rh7adm Group=sapsys ExecStart=/usr/sap/startsap ExecStop=/usr/sap/stopsap [Install] WantedBy=graphical.target