Upstart tem um modelo de iniciar qualquer trabalho disponível quando o evento acontecer. Compare isso com o Systemd, que inicia processos que têm todos os outros sistemas em execução. A principal diferença é que o Upstart está esperando por eventos e o Systemd está coordenando dependências. Ambos os sistemas podem executar scripts regulares e ambos tentam começar em paralelo. Como as diferenças são tão pequenas, os scripts iniciais geralmente podem ser chamados com um arquivo de serviço Systemd. Eles também podem, ambos executam arquivos Systemv inalterados. De fato, ambos procuram uma estrutura antiga de arquivos Systemv por padrão. A grande diferença é que o Upstart procura eventos definidos para iniciar qualquer coisa. Então, se você deseja adicionar seu próprio serviço, precisa descobrir em qual contexto você precisa do seu serviço. Normalmente, isso é fácil, pois você deseja algo que seja executado, por exemplo, na sua área de trabalho. A área de trabalho começa com o Event Runlevel 5, então você define isso em seu script. Para Systemd, por outro lado, este é o alvo gráfico. No Upstart, você também tem outros eventos que pode usar, como solicitação de montagem, montada e teclado. Estes são tratados com Systemd através de soquetes e DBUs.
Como você migra scripts?
Você tem todos os scripts iniciantes em /etc /init, seus nomes são o nome do trabalho com uma extensão 'conf'. Os scripts não são executáveis, eles apenas apontam para um executável ou mais que deve ser executado. Em qualquer script iniciante, você definiu em qual evento o script deve iniciar e quando deve parar. Você também deve ter entradas pré-iniciante e pós-parada. Isso preparará o meio ambiente e limpará após a execução. Um script de amostra está abaixo
Descrição "um script simples"
Comece no Runlevel [2345]
Pare no Runlevel [06]
reaparecimento
Env script_env_var = '/caminho/para/arquivo.configuração
chdir/path/to/script/
Script executivo.sh
A declaração 'Exec' diz o que acontecerá quando você começar manualmente. As diretivas de início e parada define quando o script começará automaticamente. Como você pode ver, você também pode definir o diretório em que ele será executado. Há muito mais aspectos para iniciar, mas você deve aprender a migrar para fora.
Para que este script funcione no Systemd, você precisa criar um arquivo de serviço.
Unidade]
Descrição = um script simples
[Serviço]
Ambiente = script_env_var =/caminho/para/arquivo.Config
WorkingDirectory =/Path/to/script
Execstart =/usr/bin/script Bash.sh
Reinicie = sempre
[Instalar]
WantedBy = MultiUser.alvo
Aqui você pode ver que as mesmas coisas acontecem, mas com outras palavras -chave. O formato é simples e direto ao ponto. Em vez de ter níveis de execução, você aponta para o qual o alvo deseja seu script. Isso destaca que o Systemd tem tudo a ver com dependência e iniciar coisas para o ambiente específico. Observe também que o ExecStart aponta para um caminho global, nunca usa um caminho local.
Onde isso se destaca?
Upstart foi projetado, para comportamento paralelo, mas também foi projetado para ser pequeno. Se você achar isso em qualquer lugar, ainda estará em sistemas incorporados e Chromeos. Sim, Chromeos teve isso. O motivo é que ele foi construído no topo se o Ubuntu desde o início, no momento em que o Ubuntu teve o início como o sistema inicial padrão. Desde então, o Chromeos passou a usar o gentoo como base.
Upstart é um tópico interessante, mas principalmente histórico. Você pode precisar disso apenas se encontrar sistemas antigos. A alternativa mais comum no Linux agora é Systemd. Se você tiver reservas em relação ao Systemd, deve procurar outros sistemas mínimos. Um interessante é o sem suck, sinit. Ele suporta três sinais e você deve escrever todos os scripts para ele ou modificar os scripts de outra pessoa. Este pode ser um exercício interessante, mas só é útil se você estiver trabalhando em um sistema muito mínimo e especializado.