Menu Close

16.12. 서비스에서 사용하는 파일 찾기

init 스크립트는 전용 디렉터리에서 함수 라이브러리를 로드해야 하며 구성, 환경 및 PID 파일을 가져올 수 있습니다. 환경 변수는 init 스크립트 헤더에서 #config 로 시작하는 행에서 지정되며 EnvironmentFile 장치 파일 옵션으로 변환됩니다. #pidfile init 스크립트 행에 지정된 PID 파일은 PIDFile 옵션을 사용하여 유닛 파일로 가져옵니다.

init 스크립트 헤더에 포함되지 않은 주요 정보는 서비스 실행 파일의 경로이며 서비스에 필요할 가능성이 있는 기타 파일입니다. 이전 버전의 Red Hat Enterprise Linux에서 init 스크립트는 Bash case 문을 사용하여 start,stop, 또는 restart 와 같은 기본 작업에서 서비스 동작을 정의했습니다. postfix init 스크립트에서 발췌한 내용은 service start에서 실행할 코드 블록을 보여줍니다.

conf_check() {
    [ -x /usr/sbin/postfix ] || exit 5
    [ -d /etc/postfix ] || exit 6
    [ -d /var/spool/postfix ] || exit 5
}

make_aliasesdb() {
	if [ "$(/usr/sbin/postconf -h alias_database)" == "hash:/etc/aliases" ]
	then
		# /etc/aliases.db might be used by other MTA, make sure nothing
		# has touched it since our last newaliases call
		[ /etc/aliases -nt /etc/aliases.db ] ||
			[ "$ALIASESDB_STAMP" -nt /etc/aliases.db ] ||
			[ "$ALIASESDB_STAMP" -ot /etc/aliases.db ] || return
		/usr/bin/newaliases
		touch -r /etc/aliases.db "$ALIASESDB_STAMP"
	else
		/usr/bin/newaliases
	fi
}

start() {
	[ "$EUID" != "0" ] && exit 4
	# Check that networking is up.
	[ ${NETWORKING} = "no" ] && exit 1
	conf_check
	# Start daemons.
	echo -n $"Starting postfix: "
	make_aliasesdb >/dev/null 2>&1
	[ -x $CHROOT_UPDATE ] && $CHROOT_UPDATE
	/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"
	RETVAL=$?
	[ $RETVAL -eq 0 ] && touch $lockfile
        echo
	return $RETVAL
}

init 스크립트의 확장성을 통해 start() 함수에서 호출되는 conf_check()make_aliasesdb() 를 지정할 수 있습니다. 더 자세히 살펴보면 기본 서비스 실행 /usr/sbin/journal , / etc/journal/ and / var/ spool/ avoided/ 구성 디렉토리 및 /usr/sbin/ postconf/ 디렉토리 등 여러 외부 파일과 디렉터리가 언급됩니다.

systemd 는 사전 정의된 작업만 지원하지만 ExecStartPre, ExecStart Post, Exec Stop 및 Exec Reload 옵션을 사용하여 사용자 지정 실행 파일을 실행할 수 있습니다. 지원 스크립트와 함께 /usr/sbin/postfix 는 서비스 시작 시 실행됩니다. 복잡한 init 스크립트를 변환하려면 스크립트의 모든 문 용도를 이해해야 합니다. 일부 설명은 운영 체제 버전에 고유하므로 번역할 필요가 없습니다. 반면, 새로운 환경에서는 물론 서비스 실행 파일 및 지원 파일에서도 일부 조정이 필요할 수 있습니다.