현재 엔지니어링 그룹을 위한 다양한 라이센스 서버를 시작하는 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