Red Hat Training
A Red Hat training course is available for RHEL 8
3.5.4.4. Encontrar arquivos utilizados pelo serviço
Os scripts de inicialização exigem o carregamento de uma biblioteca de funções de um diretório dedicado e permitem a importação de configuração, ambiente e arquivos PID. As variáveis de ambiente são especificadas na linha começando com #config no cabeçalho do init script, que se traduz para a opção de arquivo de unidade EnvironmentFile
. O arquivo PID especificado na linha de scripts init #pidfile é importado para o arquivo de unidade com a opção PIDFile
.
A informação chave que não está incluída no cabeçalho do init script é o caminho para o executável do serviço, e potencialmente alguns outros arquivos requeridos pelo serviço. Em versões anteriores do Red Hat Enterprise Linux, os scripts de inicialização usavam uma declaração de caso Bash para definir o comportamento do serviço em ações default, tais como start, stop ou restart, bem como ações personalizadas. O seguinte trecho do script init postfix
mostra o bloco de código a ser executado no início do serviço.
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 }
A extensibilidade do init script permitiu especificar duas funções personalizadas, conf_check()
e make_aliasesdb()
, que são chamadas a partir do bloco de funções start()
. Observando mais de perto, vários arquivos e diretórios externos são mencionados no código acima: o principal serviço executável /usr/sbin/postfix
, os diretórios de configuração /etc/postfix/
e /var/spool/postfix/
, assim como o diretório /usr/sbin/postconf/
.
Systemd suporta apenas as ações predefinidas, mas permite executar executáveis personalizados com ExecStart
, ExecStartPre
, ExecStartPost
, ExecStop
, e ExecReload
opções. O /usr/sbin/postfix
junto com os scripts de suporte são executados no início do serviço. A conversão de scripts complexos de inicialização requer a compreensão do propósito de cada declaração no script. Algumas das declarações são específicas para a versão do sistema operacional, portanto, não é necessário traduzi-las. Por outro lado, alguns ajustes podem ser necessários no novo ambiente, tanto no arquivo de unidade quanto no executável do serviço e nos arquivos de suporte.