Qual é a maneira recomendada de executar um programa na inicialização?

1

Estou usando o Ubuntu 14.04.3 em um servidor que executa vários aplicativos da Web caseiros. Eu quero que cada aplicativo seja iniciado logo após o lançamento do sistema - especificamente, assim que o Postgresql estiver sendo executado - e depois executado até que o sistema seja desligado.

Agora, estou fazendo isso com o GNU Screen: executo cada aplicativo em sua própria "janela" de terminal. Isso é simples e facilita a exibição de qualquer saída de erro gerada, mas parece amadora e eu tenho que fazer isso manualmente toda vez que o sistema for reiniciado.

Procurei escrever scripts de configuração do Upstart para cada aplicativo, mas eu teria que escolher uma dessas opções desagradáveis:

  • As tarefas do sistema são executadas por root e exigem que os arquivos de configuração sejam instalados em um caminho do sistema.
  • Os trabalhos do usuário parecem com o que eu quero, mas eles estão obsoletos nas versões recentes do Upstart e aparentemente nem mesmo são suportados Ubuntu.
  • Os trabalhos da sessão são extremamente difíceis de configurar se você estiver executando um servidor.

Além de tudo isso, o Upstart já começou a ser substituído pelo systemd em versões recentes do Ubuntu.

Qual é a maneira recomendada de iniciar uma tarefa, como estou descrevendo? Devo morder a bala e usar um trabalho do sistema Upstart, ou há uma maneira mais fácil?

    
por bdesham 14.08.2015 / 15:09

1 resposta

1

Desde que eu esteja seguindo Ask Ubuntu, nunca vi ninguém usando user & amp; trabalhos iniciados na sessão. Esta é a primeira vez que ouvi sobre a existência deles.

  • Os trabalhos do usuário foram preteridos com o upstart v1.7, o Ubuntu 14.04 vem com o v1.12
  • Os trabalhos da sessão foram feitos para outra finalidade, principalmente a sessão do usuário. Não parece certo iniciar uma sessão de inicialização do usuário em um servidor apenas para executar esses daemons.

Melhor manter os trabalhos do sistema, use su ou sudo para executá-los como um usuário diferente e pode ser mais limpo se você usar setuid e setgid , ou exec start-stop-daemon --start -c <myuser> --exec <command> consulte Execute um trabalho como um usuário diferente

BTW, você pode usar start on started postgresql & amp; stop on stopping postgresql como seus serviços dependem do postgresql. Então, eles são iniciados depois de iniciados e depois parados antes de serem parados. Veja caso similar aqui Como posso fazer certeza de que um trabalho do Upstart para antes que outro trabalho do Upstart seja interrompido?

Para monitorar erros, você pode usar o recurso de registro.

    
por user.dz 02.09.2015 / 12:06