내 솔루션 (지금까지)은 common-session에서 pam_systemd.so를 주석 처리했습니다. 모두 제어 그룹이없는 system.slice에서 실행됩니다. 나는 그것의 충격을 아직 확신 할 수는 없지만 최소한 물건은 달리고, 달리기를 유지하며, 깨끗하게 종료된다.재부팅시 systemd를 종료하지 못하도록 시스템을 중지하십시오.
우리의 소프트웨어는 자체 개발되었으며 SLES에서 실행됩니다. java, oracle, sysadmin 용 tomcat 웹 페이지입니다. 우리는이 모든 프로세스를 시작하는 스크립트를 사용하고 있습니다. systemd까지 훌륭하게 작업 해 왔습니다.
"env"스크립트는 설정 파일에서 정보를 수집 한 다음 java, oracle 등을 시작하는 다른 스크립트를 호출합니다. "oracle"과 같은 다른 스크립트 "su".
이 "env"스크립트에 대한 단위가 있으며 작동을 시작합니다. "systemctl stop env"를 실행하면 Stop이 작동합니다.
내 문제는 재부팅 할 때 제일 먼저 모든 사용자가 죽고 모든 DB, 자바 프로세스 등입니다. 기본적으로 DB를 충돌 시키므로 실제로 멈추지 않습니다. 그 다음 정지하려고 시도하고 물건이 다운되어 있기 때문에 수 없습니다.
나는 KillUserProcesses = no, enable-linger, KillExcludeUsers =, systemd-run --scope를 추가하려고 시도했지만 여전히 죽습니다.
시스템을 재부팅 할 때 시스템을 정지시키지 않거나 모든 하위 스크립트의 단위를 알아 내야 할 수있는 방법이 있습니까?
아래의 내용은 실행중인 실제 스크립트가 아니라 문제를 복제하는 것입니다.
SLES12SP2 (systemd 228)에서 아래 코드를 사용하여 복제 할 수있었습니다. 나는 아치 기계를 만들었지 만 죽이지는 않았다.
내가 느낀 한 가지는 수면 600이 sles12의 사용자 슬라이스이지만 아치의 시스템 슬라이스였습니다. SLES12에
systemd-cgls :
`-user.slice
|-user-1000.slice
| |[email protected]
| | `-init.scope
| | |-1362 /usr/lib/systemd/systemd --user
| | `-1371 (sd-pam)
| `-session-c1.scope
| `-1383 sleep 600
및 아치 :
└─system.slice
├─env.service
│ └─276 sleep 600
사용자 슬라이스 및 세션 심지어 아치에 스와 함께 만들어지지 않습니다.
내 서비스 파일 :#!/bin/bash
case $1 in
start)
/pro/bin/sys/services/sleep.sh start
;;
stop)
/pro/bin/sys/services/sleep.sh stop
;;
esac
과 수면 스크립트 :
#!/bin/bash
case $1 in
start)
echo "starting sleep"
su sleepuser -c "sleep 600 &"
;;
stop)
echo "stopping sleep"
sleep 300
;;
esac
서비스 파일을 게시 할 수 있습니까? 네가 뭔가 이상하게 여기는 것처럼 나에게 들린다. – nir0s