그래서 시스템 지원 시스템에서 서비스를 시작하려고 합니다. 서비스 이름은 ossec-hids-authd
ossec(침입 탐지 소프트웨어)의 인증 엔진(프록시)입니다. init 스크립트를 시작하면 systemctl 시간이 초과되고 상태를 가져오는 동안 이 오류가 표시됩니다.
/etc/init.d/ossec-hids-authd status
● ossec-hids-authd.service - LSB: Authentication Daemon for OSSEC-HIDS.
Loaded: loaded (/etc/rc.d/init.d/ossec-hids-authd; bad; vendor preset: disabled)
Active: failed (Result: timeout) since Thu 2018-02-22 07:34:28 UTC; 11min ago
Docs: man:systemd-sysv-generator(8)
Feb 22 07:24:11 ip-10-0-197-117.ec2.internal systemd[1]: Starting LSB: Authentication Daemon for OSSEC-HIDS....
Feb 22 07:24:11 ip-10-0-197-117.ec2.internal ossec-hids-authd[21142]: [39B blob data]
Feb 22 07:24:11 ip-10-0-197-117.ec2.internal systemd[1]: PID file /var/run/ossec-authd.pid not readable (yet?) after start.
Feb 22 07:24:11 ip-10-0-197-117.ec2.internal ossec-hids-authd[21142]: 2018/02/22 07:24:11 ossec-authd: INFO: Started (pid: 21148).
Feb 22 07:34:28 ip-10-0-197-117.ec2.internal systemd[1]: ossec-hids-authd.service start operation timed out. Terminating.
Feb 22 07:34:28 ip-10-0-197-117.ec2.internal systemd[1]: Failed to start LSB: Authentication Daemon for OSSEC-HIDS..
Feb 22 07:34:28 ip-10-0-197-117.ec2.internal systemd[1]: Unit ossec-hids-authd.service entered failed state.
Feb 22 07:34:28 ip-10-0-197-117.ec2.internal systemd[1]: ossec-hids-authd.service failed.
Feb 22 07:40:20 ip-10-0-197-117.ec2.internal ossec-hids-authd[21142]: 2018/02/22 07:40:20 ossec-authd(1225): INFO: SIGNAL [(15)-(Terminated)] Received. Exit Cleaning...
이제 init 스크립트에서 프로세스가 실제로 pid 파일을 생성하는 /var/ossec/var/run
대신 /var/run
pid 파일이 실제로 생성되고 있는지 확인했습니다. 그러나 어떻게 든 systemctl은 그것을 인식하지 못합니다.
systemd가 외부에서 생성된 pid 파일을 인식하지 못할 가능성이 있습니까 /var/run
? 이 경우 어떻게 해야 합니까?
다음은 초기화 스크립트입니다.
#!/bin/sh
#
# ossec-authd Start the OSSEC-HIDS Authentication Daemon
#
# chkconfig: 2345 99 01
# description: Provides key signing for OSSEC Clients
# processname: ossec-authd
# config: /var/ossec/etc/ossec.conf
# pidfile: /var/run/ossec-authd.pid
### BEGIN INIT INFO
# Provides: ossec-authd
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Authentication Daemon for OSSEC-HIDS.
# Description: Provides key signing for OSSEC Clients
### END INIT INFO
# Author: Brad Lhotsky <[email protected]>
NAME=ossec-authd
DAEMON=/var/ossec/bin/ossec-authd
DAEMON_ARGS="-p 1515 2>&1 >> /var/ossec/logs/ossec-authd.log &"
PIDDIR=/var/ossec/var/run
SCRIPTNAME=/etc/init.d/ossec-authd
. /etc/rc.d/init.d/functions
getpid() {
for filename in $PIDDIR/${NAME}*.pid; do
pidfile=$(basename $filename)
pid=$(echo $pidfile |cut -d\- -f 3 |cut -d\. -f 1)
kill -0 $pid &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
PIDFILE=$filename
PID=$pid
else
rm -f $filename
fi;
done;
}
start() {
echo -n $"Starting $NAME: "
daemon $DAEMON $DAEMON_ARGS
retval=$?
if [ $retval -eq 0 ]; then
echo_success
echo
else
echo_failure
echo
fi
return $retval
}
stop() {
echo -n $"Stopping $NAME: "
getpid
killproc -p $PIDFILE $NAME
retval=$?
echo
return $retval
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
getpid
if [ -z $PIDFILE ]; then
status $NAME
else
status -p $PIDFILE $NAME
fi;
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 2
;;
esac
exit $?
답변1
systemd는 시작 시 또는 명령 시 daemon-reload
임시 .service 파일을 생성 하기 위해 init 스크립트의 주석을 구문 분석합니다. 줄 바꾸기
# pidfile: /var/run/ossec-authd.pid
도착하다
# pidfile: /var/ossec/var/run/ossec-authd.pid
그리고 달리다systemctl daemon-reload
UPD: 이제 런타임 시 authd에 의해 pid 파일 이름이 생성되고 init 스크립트가 $PIDDIR/${NAME}*.pid를 검색해야 한다는 것을 알 수 있습니다.
Systemd는 pidfile을 검색할 수 없지만 pidfile이 없어도 작동합니다. 따라서 # pidfile:
줄을 완전히 제거하거나 자신만의 .service 파일을 작성할 수 있습니다.
답변2
이 모든 것은 완전히 불필요합니다.
systemd-sysv-generator
이전 RedHat 주석 헤더와 LSB 헤더를 사용한 van Smoorenburg 스크립트의 동작은 rc
흥미롭지만 무의미한 시간 낭비입니다.
rc
van Smoorenburg 스크립트를 수정하고 PID 파일이 제대로 작동하도록 하는 데 시간을 낭비하지 마십시오 . 적절한 서비스 관리를 사용하면 실제로 불안정하고 위험한 PID 파일 메커니즘이 필요하지 않습니다. 당신은 그런 사람이 될 필요가 없습니다 ossec-control
. 그 모든 것을 잊어버리고 자신을 체계화된 서비스 단위로 만드세요.
옵션이 필요한지 여부 에 따라 두 가지 다른 클래스의 OSSEC 서비스에 대한 두 가지 간단한 템플릿 서비스 단위는 -f
여기에 추가 읽기 항목으로 나열된 답변에 나와 있습니다. 하나 또는 둘 다 조정하십시오.