Executando trabalhos iniciados pelo usuário na inicialização

8

Estou executando o servidor Ubuntu 11.04. Eu criei um trabalho de usuário Upstart conforme descrito aqui .

Eu tenho o seguinte arquivo no meu /home/myuser/.init/sensors.conf:

start on started mysql
stop on stopping mysql


chdir /home/myuser/mydir/project
exec /home/myuser/mydir/env/bin/python /home/myuser/mydir/project/manage.py sensors

respawn

respawn limit 10 90

Como myusereu posso iniciar, parar e recarregar o trabalho, ele funciona perfeitamente:

$ start sensors
sensors start/running, process 1332
$ stop sensors
sensors stop/waiting

O problema é que o trabalho não é iniciado automaticamente na inicialização quando é mysqliniciado. Depois de uma nova inicialização, mysqlestá em execução, mas meu sensorstrabalho não é.

O que é estranho, é que, embora o trabalho não comece na inicialização, se eu usar sudopara reiniciar, mysqlele realmente inicia o meu trabalho. Os seguintes comandos são executados a partir myuserde uma nova inicialização:

$ status sensors
sensors stop/waiting
$ sudo restart mysql
mysql start/running, process 1209
$ status sensors
sensors start/running, process 1229

A documentação para trabalhos do usuário Upstart é bastante limitada. Qual é a técnica correta para que um trabalho do usuário seja iniciado automaticamente na inicialização do sistema?

Eu sei que posso simplesmente jogar algo rc.localpara iniciá-lo, ou eu poderia mudar o meu sensors.confpara, /etc/initmas estou curioso para saber se existe uma maneira de fazer isso usando apenas o Upstart.

dgel
fonte

Respostas:

8

O problema é que os trabalhos do usuário não são carregados no Upstart até que o usuário crie uma sessão do Upstart executando um dos initctlcomandos.

Eu o descrevi com mais detalhes em http://bradleyayers.blogspot.com.au/2012/04/enabling-upstart-user-jobs-to-start-at.html e também escrevi um trabalho Upstart que funciona em torno do problema.

bradley.ayers
fonte
Há outra maneira de fazer isso documentado em upstart.ubuntu.com/cookbook/… - ele possui um bug, mas você precisará alterar "start session_init" para "start session-init".
Natevw
-1

Olhando para fontes como /etc/init/mysql.confe http://upstart.ubuntu.com/cookbook/#start-on , parece-me que você deve mudar sua start onlinha para algo assim:

start on (mysql and runlevel [2345])

Não sei se concordo que o iniciante carece de documentação, mas às vezes tenho dificuldade em entender os documentos. Normalmente, apenas faço tentativa e erro até que funcione. A solução acima pode ser um exagero, na verdade ... algo tão simples quanto isso pode ser suficiente:

start on mysql
Carl Zulauf
fonte
Não é que o iniciante não possua documentação em geral, é que ele não possui muita documentação sobre trabalhos do usuário - trabalhos colocados em /home/$USER/.init (não trabalhos colocados em / etc / init).
dgel
Eu tentei suas sugestões, mas não há diferença. Não é um problema com a minha start onlinha, mas é apenas o fato de que o iniciante carrega apenas o / etc / init na inicialização, mas não os arquivos init do usuário em seus programas.$HOME/.init
dgel
Desculpe, perdi que este era um trabalho do usuário e não um trabalho /etc/init. Você está certo de que falta documentação para isso e não sei como garantir que os ~/.initscripts sejam iniciados.
Carl Zulauf
Os documentos que encontrei indicam que os $HOME/.inittrabalhos não estão ativados por padrão e que algumas alterações /etc/dbus-1/system.d/Upstart.confpodem ser necessárias. upstart.ubuntu.com/cookbook/#run-a-job-as-a-different-user
Carl Zulauf