O script Upstart não inicia

33

Ubuntu 10.04

Eu criei este script upstart ( /etc/init/pure-ftpd.conf ):

# pure-ftpd - FTP server

description "Pure-FTPd server"

start on filesystem
stop on runlevel S

respawn
respawn limit 10 5
pid file /var/run/pure-ftpd.pid
console output

pre-start script
    test -x /usr/local/sbin/pure-ftpd || { stop; exit 0; }
end script

exec /usr/local/sbin/pure-ftpd --maxclientsnumber 2 --maxclientsperip 10 --prohibitdotfileswrite --prohibitdotfilesread --noanonymous --chrooteveryone --dontresolve --nochmod --pidfile /var/run/pure-ftpd.pid

Mas ...

# start pure-ftpd
start: Unknown job: pure-ftpd

e

# service pure-ftpd start
start: Unknown job: pure-ftpd


Qual é o problema?
É necessário fazer algo mais?
É necessário criar um script em /etc/init.d também?

    
por Juan Simón 17.03.2011 / 17:22

6 respostas

24

Isso geralmente significa que você tem um erro no arquivo .conf - por exemplo, não tenho certeza se a sub-rotina pid é suportada em 10.04, stop não pode ser usada no script etc.

Eu tentava iniciar o arquivo do zero (com apenas start , stop etc) e, em seguida, desenvolvendo-o lentamente adicionando mais e mais linhas e testando-o via start pure-ftpd .

Por exemplo:

# cat pure-ftpd.conf 
start on filesystem
stop on runlevel S

respawn
respawn limit 10 5

# start pure-ftpd
pure-ftpd start/running

# cat pure-ftpd.conf 
start on filesystem
stop on runlevel S

respawn
respawn limit 10 5
pid file /var/run/pure-ftpd.pid

# start pure-ftpd
start: Unknown job: pure-ftpd
    
por arrange 17.03.2011 / 18:44
45

Você também pode executar init-checkconf para verificar a sintaxe

init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok
    
por Stefano Gargiulo 13.03.2013 / 02:34
26

Primeiro, você pode verificar se o seu trabalho é realmente conhecido por upstart:

sudo initctl list | grep your_job_name

Se não for encontrado, você pode tentar recarregar a configuração e, em seguida, verificar novamente:

sudo initctl reload-configuration

# re-check
sudo initctl list | grep your_job_name

Em seguida, tente novamente começar seu trabalho:

sudo start your_job_name

Se você não estava recebendo nenhum log /var/log/daemon.log ou /var/log/syslog antes, você pode ter alguns agora.

    
por Mark Stosberg 06.05.2013 / 20:25
6

A referência mais relevante para a sintaxe do arquivo de trabalho estará disponível quando você executar o comando:

man 5 init

no seu sistema. Para o Ubuntu 10.04, como você encontrou na resposta anterior, a sintaxe do arquivo pid está incorreta.

Sempre que você receber o erro "job desconhecido", é uma boa idéia verificar os logs (pre 11.04, /var/log/daemon.log, 11.04 e maiores, tudo em / var / log / syslog)

Você pode ver um erro como este:

init: /etc/init/test.conf:2: Unknown stanza
    
por SpamapS 28.03.2011 / 20:10
3

De qualquer forma, estou aqui porque tive o mesmo problema, mas minha sintaxe estava 100% correta.

Depois de alguma depuração, descobri outro problema que pode causar esse erro "Tarefa desconhecida" :

upstarts usa o inotify para monitorar as alterações do arquivo .conf e trabalhos de instalação automática, isso é muito legal (para isso, você não precisa de algo como atualização. rc com upstart!) mas pode não ser perfeito se você (como eu, nesse caso) usar algum programa GUI FTP / SCP para carregar e editar configurações em servidores remotos, o trabalho pode ser silenciosamente desinstalado por upstart ao editar arquivo dessa maneira.

para corrigir simplesmente faça isso (que me salvou)

touch /etc/init/*

ele gerará eventos de inotificação para atualizar todos os confs do upstart.

    
por Stefano Gargiulo 13.03.2013 / 02:48
2

Eu tive o mesmo problema nos meus containers do Ubuntu 14.04 Docker. Como se vê, a imagem do Ubuntu 14.04 (se não outras) para o Docker não suporta o Upstart da mesma forma que uma máquina virtual completa.

Para responder a esta pergunta, por que o serviço não inicia, é porque o initctl não é um programa Upstart real: ele é mapeado para / bin / true.

Para verificar, execute o seguinte em um contêiner do Docker do Ubuntu 14.04 vs. Vagrant e vs. um droplet DigitalOcean

$ ls -al /sbin/initctl

Você verá que o initctl não é o mesmo no Docker vs. os outros.

Um link que pode ajudar você a entender melhor. link

    
por Johnathan J. 28.09.2014 / 17:47