RHEL6 초기화 스크립트를 systemd로 변환해 보세요.

RHEL6 초기화 스크립트를 systemd로 변환해 보세요.

현재 엔지니어링 그룹을 위한 다양한 라이센스 서버를 시작하는 RHEL 6.x 시스템에 init 스크립트가 있습니다.

각 공급업체에는 라이센스 서버 시작/중지를 위한 자체 프로세스, 환경 변수 및 기타 세부 정보가 있으므로 수년에 걸쳐 각 응용 프로그램에 대한 START, STOP, STAT 스크립트를 만들어 공급업체별 항목을 표준 사이트에 매핑했습니다. 이를 통해 다음을 통해 모든 애플리케이션에 소프트 링크할 수 있는 다음과 같은 범용 초기화 스크립트를 생성할 수 있습니다 /etc/sysconfig/init.d.

#!/bin/bash
#
#   START/STOP/STAT license servers
#
# chkconfig: 345 95 05
# description: Startup/Shutdown license servers

#####################################
#   Who/When/Where
#
WHO=`who am i`
WHEN=`date`
WHERE=`hostname | cut -f1 -d "."`

#####################################
#   Figure out how we were called
#
APPNAME=`basename $0 | cut -f2 -d "_"` ; export APPNAME
SERVICELOG="/license/$APPNAME/logs/service.log" ; export SERVICELOG

echo "/etc/init.d/ License Script was ran at: $WHEN app was: $APPNAME command was: $1" >> $SERVICELOG

#################################################
#   Time to call App Specific Executable
#
case "$1" in
      start) su - licadmin /license/$APPNAME/scripts/START
             echo "$APPNAME Daemon Started $WHEN by $WHO on $WHERE" >> $SERVICELOG
              ;;
           stop)
              su - licadmin /license/$APPNAME/scripts/STOP
              echo "$APPNAME Daemon Stopped $WHEN by $WHO on $WHERE" >> $SERVICELOG
              ;;
         status)
              su - licadmin /license/$APPNAME/scripts/STAT
              ;;
 reload|restart)
              $0 stop
              $0 start
              echo "$APPNAME Daemon Restarted $WHEN by $WHO on $WHERE" >> $SERVICELOG
              ;;
              *)
              echo "Usage: $0 {start|stop|status|reload|restart}"
              exit 1
              ;;
esac
exit 0
##########################################################################
#EOF(lic_init)

나는 systemd에 대한 문서를 연구했고, 내가 하는 많은 일(시작/중지/통계)이 systemd에 기본적으로 "있는 것처럼 보이지만" 그렇지 않기 때문에 표준을 유지하는 방법에 대해 정말 열심히 생각하고 있습니다. 내 Bash 스크립트를 호출하는 새로운 시스템 서비스를 갖고 싶지는 않습니다.

내 전환을 처리하는 방법에 대한 아이디어가 있습니까?

답변1

더 작은 부분으로 나누어 보겠습니다.

  • WHO/WHEN/WHERE는 systemd의 로그에 의해 처리됩니다. 예를 들어 모든 단위에 대한 로그를 쿼리할 수 있으므로 journalctl -u $APPNAME.service이러한 단위는 여기에 필요하지 않으며 삭제할 수 있습니다.
  • 마찬가지로 $SERVICELOG는 systemd 로그로 대체될 수 있습니다. 더 이상 자체 로그 회전 관리에 대해 걱정할 필요가 없습니다.
  • systemd는 사용자 정의 "상태" 명령을 직접 지원합니다. 대신 systemctl status정규화된 상태 출력을 사용할 수 있습니다 . 사용자 정의 상태 명령을 정말로 원한다면 이를 별도의 systemd 로 구현할 수 있습니다 service.
  • 남은 것은 동일한 사용자가 동일한 방식으로 중지하고 시작하려는 여러 서비스가 있다는 것입니다. 체계템플릿 단위이 문제를 해결하기 위해 설계되었습니다. 템플릿 단위를 생성한 다음 각 애플리케이션에 대해 해당 템플릿의 인스턴스를 생성할 수 있습니다.systemctl start licensedapps@someapp

관련 정보