Perché il mio servizio di avvio non si avvia all'avvio del sistema?


37

In seguito a questa domanda , ho scritto un semplice servizio di avvio ( /etc/init/pms.conf ) per la mia casella senza testa di Ubuntu Server 11.04 come segue:

start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn

exec /home/administrator/pms-current/PMS.sh

Posso avviare (o interrompere) questo servizio a piacere dalla riga di comando:

service pms start

E vedo che sta davvero funzionando.

Tuttavia, al primo avvio del computer, il servizio non si avvia. Se SSH nella casella e controllo lo stato del servizio ottengo:

$ service pms status
pms stop/waiting

La mia domanda è: perché sta succedendo questo? Perché il mio servizio non si avvia all'avvio?

AGGIORNAMENTO 1 : non sono sicuro che il mio servizio sia stato avviato e successivamente morendo o semplicemente non sia stato avviato affatto, ho aggiunto quanto segue a PMS.sh:

echo "STARTED" > $STARTLOG

Questo ovviamente mi dà solo qualcosa da cercare. Ho provato questo avviando il servizio da solo e quindi controllando start.log . Ho quindi eliminato start.log e riavviato. Non era lì dopo il riavvio, quindi sembra che l'avvio non stia iniziando il mio servizio. Suppongo che potrebbe morire in un momento precedente del processo, ma sembra piuttosto improbabile data la semplicità di tutto.

AGGIORNAMENTO 2 : Ho appena eseguito l'aggiornamento alla versione 11.10 che include un aggiornamento iniziale, ma questo problema si verifica ancora.

AGGIORNAMENTO 3 : Come richiesto, ho avviato con --debug. L'output di cat /var/log/syslog | grep initè troppo lungo per essere inserito nella domanda, ma lo vedi qui .

AGGIORNAMENTO 4 : più registri, questa volta la configurazione di avvio è inclusa nella parte superiore. Esegui 1 ed esegui 2 .


Sei sicuro che lo script non sia stato eseguito? Il messaggio di arresto / attesa di pms indica che il processo di avvio è stato eseguito e che tutti i comandi sono terminati normalmente.
organizzare il

Aggiungi l'output di cat /var/log/syslog | grep initdopo aver abilitato il log di avvio per upstart usando le istruzioni di Upstart Debugging
Ciaran Liedeman

@Anarci: vedi aggiornamento 3 nella mia domanda.
Kent Boogaart,

La maggior parte degli utenti non fornirà un indirizzo email del genere, piuttosto fornirà un collegamento a un sito di pastebin come Ubuntu pastebin
Ciaran Liedeman,

@Anarci: fatto - vedi la mia domanda.
Kent Boogaart,

Risposte:


19

Consiglierei di aumentare la verbosità del lavoro, ad esempio utilizzando le voci pre-avvio / post-avvio.

pre-start script
  logger "pre-start for myprog"
end script

post-start script
  logger "post-start for myprog"
end script

# and for PMS itself:
script
  logger "just before executing PMS"
  exec /home/administrator/pms-current/PMS.sh
end script

Ulteriori informazioni su http://upstart.ubuntu.com/cookbook/

Dai anche un'occhiata a http://upstart.ubuntu.com/wiki/Debugging


Questo mi sta davvero facendo impazzire. Ho provato una dozzina di cose diverse sul retro del tuo post. Tutti hanno fallito con vari messaggi oscuri nei registri. Il mio ultimo tentativo ha portato a init: pms main process (1329) è terminato con lo stato 143 , il che significa nulla per me. Vedo che PMS.sh non viene nemmeno avviato perché la prima cosa che fa è scrivere nel proprio registro e quella voce di registro non è presente. Posso vedere il mio output pre-avvio, che mi dice che il file di destinazione esiste ed è eseguibile. Lo riprenderò domani, ma se hai qualche idea mi piacerebbe ascoltarle. Grazie.
Kent Boogaart,

ciao @KentBoogaart, mi sembra di avere il tuo stesso problema. Hai trovato una soluzione?
Daniele B,

@KentBoogaart Ho lo stesso problema come te? Qualche fortuna con la tua?
Mevin Babu,

14

Quello che probabilmente sta succedendo qui è che pms sta iniziando prima che le tue schede di rete arrivino, e probabilmente anche prima dell'adattatore di loopback (lo). Supponendo che stiamo parlando di PS3 Media Server, è un servizio di rete e probabilmente non gli piace avviare senza interfacce disponibili.

Prova a cambiare i criteri di partenza per:

start on filesystem and net-device-up IFACE!=lo

Ciò significa che inizia dopo che è stata attivata un'interfaccia di rete "reale". Tuttavia, potrebbe non essere l'ideale, se eth0 è la prossima interfaccia, PMS si avvia, ma vuoi davvero che PMS utilizzi wlan0, questo non lo farà. Il servizio verrà avviato ma potrebbe non essere stato in grado di scegliere l'interfaccia su cui si desidera ascoltare. Supponendo che tu conosca l'interfaccia su cui eseguirai lo streaming e che non cambierà, lo codificherei nel lavoro, ad esempio:

start on filesystem and net-device-up IFACE=wlan0

Su Oneiric (11.10), è possibile utilizzare l'evento static-network-upper attendere tutti i dispositivi configurati staticamente. Il che è bello perché ti consente di scrivere lavori dipendenti dalla rete senza codificare a memoria l'interfaccia. [Nota: con "tutti i dispositivi configurati staticamente", mi riferisco all'utilizzo /etc/network/interfacesinvece di NetworkManager. Non significa statico nel senso di IP statico vs. DHCP.]


Sembrava il trucco, ma non ha funzionato. Ho solo loe eth0, ma ho usato il tuo secondo suggerimento: start on filesystem and net-device-up IFACE=eth0. Ancora niente dopo un riavvio. Ho appena notato qualcosa nel registro PMS che potrebbe essere un vantaggio. Investigherò e torno ...
Kent Boogaart,

È interessante. Una cosa che non ho menzionato è che ho provato il tuo script originale e ha funzionato all'avvio per la mia macchina. Ho attribuito questo solo alla fortuna del sorteggio (cioè nelle mie condizioni di gara, la macchina buona ha vinto, e nella tua la macchina cattiva ha vinto). Non riesco davvero a vedere quale altra dipendenza ci manca qui. Strano.
Mark Russell,

2
Poiché è possibile avviarlo dopo l'avvio, è necessario che ci manchi un'altra dipendenza dal servizio. Un trucco sporco che potrebbe funzionare (ma non ci illuminerà affatto) è semplicemente quello di sleep 10inserire uno - o superiore - in uno "script pre-avvio" prima di eseguire lo script della shell.
Mark Russell,

Scusa Mark, ma siamo sulla stessa pagina. Ho già provato la cosa del sonno 10 in uno script pre-avvio. Non andare. Quindi ho provato a eliminare del tutto il debug.log e riavviare. Dopo l'avvio avevo lo stesso stato di servizio e nessun file debug.log, quindi non sono convinto che PMS sia effettivamente eseguito. C'è un modo semplice per diagnosticare questo? Se modifico PMS.sh per sputare un po 'di output, dove andrà? Suppongo che potrei sempre dirigerlo sul mio file - potrei provarlo dopo.
Kent Boogaart,

Ho appena aggiornato la mia domanda con maggiori informazioni.
Kent Boogaart,

3

Dall'esame del tuo syslog il processo pms inizia senza errori, ma dopo poco tempo il suo obiettivo viene modificato dall'inizio alla fine, per significare che viene ucciso.

Questo è un po 'strano perché hai aggiunto la clausola repsawn, quindi dovrebbe tentare di ricominciare dopo che è stato arrestato ma non lo fa mai. Quindi suppongo che tu abbia rimosso la clausola di respawn.

Tra il servizio pms, l'avvio e l'arresto vengono avviati solo 2 servizi ufw e l'interfaccia di rete (eth0) e 1 viene avviato udev-fallback-graphics.

Sembra che il processo pms sia avviato in parallelo. Sfortunatamente la documentazione iniziale è un po 'confusa sulle differenze esatte tra start on ...vaniglia e start on starting ...e start on started ....

Prova a cambiare la tua stanza di avvio in

start on started networking

o anche solo

start on net-device-up IFACE=eth0

L'output del registro è leggermente strano poiché l'evento net-device-up arriva molto più tardi ma pms inizia prima di esso.

Ciò dovrebbe garantire che il processo inizi solo una volta terminata la configurazione di tutte le reti, vale a dire che il processo non è solo iniziato ma terminato.

Inoltre, non fidarti completamente dell'output del registro, all'inizio del processo di avvio la registrazione dell'output su qualsiasi file non sempre funziona. Vedi la risposta in Debug Upstart


3

Gestito per risolvere un problema simile utilizzando invece start su runlevel:

start on runlevel [2345]

3

Ho avuto lo stesso problema e alla fine l'ho risolto semplicemente con:

start on runlevel [2345]

senza alcuno net-device-upo started networkingroba

Questo è lo script upstart completo e funziona perfettamente:

# MyApp

description     "MyApp"
author          "me"

start on runlevel [2345]
stop on runlevel [016]

respawn

exec /usr/bin/myapp 2>> /var/logs/myapp.log

1

Mi sono imbattuto chkconfigdurante il mio addestramento RHCSA / CE:

sudo apt-get install chkconfig
sudo chkconfig pms on

Puoi controllare la sua pagina man di Oneiric per maggiori dettagli sulle sue capacità.


1

Ho trovato una soluzione per questo, ma non lo capisco. Se sposto PMS fuori /home/administratore dentro /bin/pmscon root come proprietario, tutto funziona bene.

Se lo lascio sotto /home/administrator/ma mi assicuro che root sia il proprietario di tutto nella barra /home/administrator/stessa, non funziona ancora.

Se imposto l'amministratore come proprietario di tutto e cambio la parte pertinente del mio script in:

sudo su administrator -c '/home/administrator/pms-current/PMS.sh'

Non funziona ancora.

Suppongo che per ora creerò una /home/root/directory e sposterò tutto lì, anche se mi piacerebbe davvero comprenderlo appieno.


Quindi chkconfignon ha funzionato neanche? Hai provato a dare la directory PMS.shera alla radice? Se funziona solo la tua soluzione, vai alla pagina Launchpad di Upstart e contatta direttamente gli sviluppatori.
Oxwivi,

E se è sufficiente spostare semplicemente .shquindi lasciare tutto lì e modificare lo script per puntare a quella directory (o forse anche cambiare directory?).
Oxwivi,

Sì, ho provato a rendere l'intera directory PMS di proprietà di root. Presumibilmente non ha funzionato perché / home / administrator / non è di proprietà di root.
Kent Boogaart,

Questo non ha comunque senso, eseguo regolarmente script nella mia directory / home tramite upstart senza problemi, strano.
organizzare il

Ancora più strano: ho appena provato tutto in / home / root / che è ovviamente di proprietà di root. Non ha funzionato Ho spostato tutto di nuovo in / bin / pms e ha funzionato di nuovo. Quindi sembra che il tentativo di avviare PMS da under / home non funzioni sul mio sistema.
Kent Boogaart,

1

Ho avuto un simile problema "no start" quando mi sono reso conto che il mio script dipendeva da un file che era nella mia casa e la casa non era accessibile perché era crittografata con il meccanismo standard di Ubuntu (.Private).

start on local-filesystems L'evento viene (probabilmente) emesso prima che il processo di decrittazione sia terminato.


1

La tua home directory è su NFS? A volte il root non può accedere a NFS.

Per la cronaca, nel mio piccolo test proprio ora il 12.04:

  • start on started networking e start on network-interface-up INTERFACE=eth0 non funziona, ma

  • start on started network-interface INTERFACE=eth0 lo fa.

Grazie a http://os4.org/wiki/upstart.html per aver sottolineato che mostra initctl list sempre la rete di lavoro interrotta.


Il collegamento a cui viene fatto riferimento è interrotto.
slm,


0

Simile a @xuhcc, sono venuto qui per scoprire perché la mia sceneggiatura di Vagrant Upstart non era in esecuzione. Si suppone che funzioni:

iniziare su vagabondo montato

Ma non in alcune build a causa del seguente bug.

https://github.com/mitchellh/vagrant/issues/6074

La soluzione alternativa elencata nel rapporto ha funzionato perfettamente per me:

$ cat /etc/init/workaround-vagrant-bug-6074.conf 
# workaround for https://github.com/mitchellh/vagrant/issues/6074
start on filesystem
task

env MOUNTPOINT=/vagrant

script
  until mountpoint -q $MOUNTPOINT; do sleep 1; done
  /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=$MOUNTPOINT
end script

Ha funzionato alla grande per me


0

ha funzionato per me (ho bisogno di iniziare il servizio dopo iface up):

start on started networking and net-device-up IFACE=wlan1 
stop on shutdown

respawn
respawn limit 10 10
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.