terça-feira, 21 de fevereiro de 2017

Init Script Required-Start Required-Stop Service Linux

Dica Rápida: 
- No geral os scripts dos serviços linux são encontrados em: /etc/init.d/...
- Caso você necessita que um serviço seja iniciado ou terminado antes de outro serviço basta incluir no script de execução do serviço o seguinte trecho:

Levamos em consideração que temos o serviço denominado primeiroServico no script do serviço /etc/init.d/primeiroServico deve-se adicionar o seguinte trecho no cabeçalho:

#!/bin/sh


### BEGIN INIT INFO
# Provides:        primeiroServico
# Required-Start: $network
# Should-Start: 
# Required-Stop:
# Should-Stop:
# Default-Start:  2 3 5
# Default-Stop:
# Description:    Descrição Serviço
### END INIT INFO

{trecho seu serviço}
Este primeiro trecho basicamente denomina seu serviço como primeiroServiço e diz que primeiro deve ser iniciado o serviço denominado "network" para que posteriormente ele inicie o serviço "primeiroServico". Onde Required-Start deve ser preenchido com o nome do seu "script/serviço" que você deseja que seja iniciado anteriormente.

Levamos em consideração agora que possuímos o serviço denominado segundoServiço (/etc/init.d/segundoServiço) o mesmo deve ser iniciado após o start dos serviços "network" e "primeiroServico" conforme trecho abaixo: 

#!/bin/sh
### BEGIN INIT INFO
# Provides:        segundoServico
# Required-Start: $network $primeiroServico
# Should-Start: 
# Required-Stop:
# Should-Stop:
# Default-Start:  2 3 5
# Default-Stop:
# Description:    Descrição Serviço
### END INIT INFO
{trecho seu serviço}
E para que o serviço seja terminado depois que outro serviço basta adicionar na linhas Required-Stop adicionando os serviços conforme exemplos a cima.

Alguns links para mais detalhes: https://wiki.debian.org/LSBInitScripts

Zend_Paginator com Doctrine HYDRATE_SCALAR e Zend_Paginator_Adapter_Array

Estava construindo uma query bem complexa e com alguns innnerJoins e para facilitar (recuperar os dados das colunas informadas no SELECT t1.column1, t2.column1...) eu precisava utilizar o “Doctrine::HYDRATE_SCALAR”, mas o paginator não conseguia fazer a contagem dos resultados (por utilizar HIDRATE_SCALAR) então após algumas pesquisas minha solução para resolver o problema foi a seguinte:
Obs: Utilizando Zend 2.
$query = UserTable::getInstance()->list($options); (Retorna a Query)

$query->setHydrationMode(Doctrine::HYDRATE_SCALAR);


//Criação do Adapter para funcionar o Paginator com HYDRATE_SCALAR

$adapter = new Zend_Paginator_Adapter_Array($query->execute());

$paginator = new Zend_Paginator($adapter, $page);

Espero que esse trecho também ajude quem precise.