job upstart do usuário em ~ / .init / não foi encontrado

7

Rodando 12.04, tenho o seguinte trabalho inicial em ~/.init/ :

# myjob

start on net-device-up
stop on [!12345]

script

echo ">> hello from user script" >> ~/tmp/upstart.log

end script

Após reiniciar minha máquina

service myjob start
# => myjob: unrecognised service

initctl lista o trabalho, mas executá-lo sem o sudo gera um erro:

initctl start myjob
# => initctl: Rejected send message, 1 matched rules; type="method_call", sender=":1.100" (uid=1000 pid=13349 comm="initctl start thunderbird ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

Eu esperaria poder iniciar o trabalho usando service ou initctl sem usar sudo . O que eu entendi mal?

Obrigado

    
por Dave Nolan 19.06.2012 / 16:03

1 resposta

12

Alguns pontos:

  1. As tarefas do usuário não estão ativadas por padrão no Ubuntu. Veja:

  2. Você nunca precisa reinicializar após criar qualquer tipo de tarefa Upstart - elas são detectadas automaticamente pelo Upstart (usando inotify).

  3. O comando service não faz parte do Upstart - é a ferramenta SystemV para manipular tarefas SysV. No entanto, o Upstart fornece compatibilidade com SystemV, de modo que os trabalhos do sistema Upstart também podem ser manipulados via service (por conveniência). Os comandos equivalentes do Upstart são start , stop e restart .

  4. Para trabalhos do usuário, você deve usar start , stop e restart (ou initctl equivalents).

Por fim, observe que os trabalhos dos usuários são muito básicos atualmente. Nós planejamos aprimorá-los significativamente para 12.10, mas por enquanto esteja ciente de que:

  • O Upstart executará todos trabalhos do usuário usando /bin/sh -e , independentemente de qual shell você usa por padrão. Esse -e também é muito importante ( man sh para detalhes).
  • O Upstart só define um conjunto mínimo de variáveis no ambiente de trabalho do usuário. Portanto, você provavelmente deve definir variáveis como HOME da seguinte forma:

    env HOME=/home/james

Veja:

por jamesodhunt 19.06.2012 / 18:20