Estou no processo de aprender o Upstart depois de ter aprendido o SMF.
Naturalmente, estou assumindo que eles cumprem o mesmo propósito, mas estou ciente de que é aqui que estou errado.
Idealmente, eu esperava que alguém tivesse escrito uma comparação para que eu não precisasse procurar recursos no Upstart que simplesmente não estejam lá. O Solaris possui algo chamado Subsistema de Contrato, que é construído no kernel e, na verdade, é o que ativa a maioria dos recursos no SMF. Estou ciente de que não há nenhum equivalente no Linux e isso pode ser a razão pela qual não consigo descobrir o que posso esperar do Upstart em termos de parada de serviço e também em monitoramento de serviço e reinicialização em caso de falha.
Para ser mais específico sobre as coisas que não consigo descobrir em Upstart:
Parando . Com o SMF estou bastante acostumado a deixar o SMF fazer o stop processo. Eu nunca escrevo scripts específicos para matar, eu não tenho para acompanhar os PIDs e eu não preciso saber quantas vezes um processo de desova, etc. Isso parece mais um processo de DIY em Upstart. Correto?
Reiniciar-em-falha . Eu realmente não entendo se isso é uma característica de Upstart ou não. Eu vejo pessoas Linux acoplando Upstart com algum tipo de mecanismo de monitoramento de processos da terra do usuário. Talvez seja isso que Eu deveria estar fazendo?
Exibindo . Eu gosto do comando SMF svcs -p <servicename>
que me permite ver todos os processos que são (atualmente) parte do serviço. No Upstart, parece-me que "um serviço"="um processo" significa que no Upstart o comando initctl status <jobname>
sempre mostrará apenas um único processo. E se eu tiver um serviço que, do ponto de vista do SO, seja dois processos separados?
Garantido apenas uma instância . Para a maioria dos daemons você realmente quer
Certifique-se de que há apenas uma instância iniciada. Para alguns
serviços até mesmo uma tentativa de iniciar uma segunda instância pode ser fatal. Eu
gostaria de dizer Upstart isso e ter Upstart me garantir isso.
Assim, mesmo se o operador executar service xyz start
e xyz
for
já em execução não deve causar uma tentativa de iniciar outra
instância de xyz
nem deve causar uma tentativa de reiniciar xyz
.
Posso fazer isso?
Delegação . Com o SMF, delegue a responsabilidade a determinados serviços para usuários não privilegiados. Por exemplo, eu tenho um pequeno grupo de usuários não privilegiados aos quais foi concedido o direito de iniciar / parar seu próprio servidor web port-80. Eu faço isso atribuindo o direito de este serviço para poder ligar a uma porta privilegiada (portno < 1024) sem atribuir qualquer outro privilégio de raiz ao serviço. Em seguida, delego o privilégio iniciar / parar nesse serviço a um grupo de usuários, através de uma função. Estou assumindo que no Upstart eu teria fazer algum script sudo para conseguir o mesmo?
Ao olhar mais de perto, parece-me que o Upstart está quase destinado a substituir o cron
. Tem o conceito de trabalhos de curta duração ou tarefas repetidas que o SMF não possui. SMF é - como o nome sugere - puramente focado em serviços , ou seja, processos de longa duração. Isso pode ser o que me confunde. Mas agora estou focado apenas em como configurar esses processos de longa duração. Eu estou procurando uma maneira de descrever o meu serviço para o sistema operacional (por exemplo, pré-condições, como iniciar, parar, delegação, privilégios, etc) e, em seguida, ter o sistema operacional cuidar disso a partir dele.
UPDATE 1: Aprendi mais: isso não é unificado no Linux, ou seja, não há consenso na comunidade Linux sobre esse assunto ... para dizer o mínimo. Isso significa que eu tenho que deixar vocês conhecerem a distro: CentOS e às vezes um pouco de RedHat (ambos na série da versão 6).
UPDATE 2: Descobri que - pelo menos algumas pessoas dizem - que a RedHat (e, portanto, o CentOS) irá, no próximo grande lançamento, abandonar o Upstart em favor de algo chamado systemd
. Isso só me deixa ainda mais confuso. O que fazer se eu quiser construir serviços confiáveis no CentOS / RH hoje?