El script de inicio no se inicia


33

Ubuntu 10.04

He creado este script de inicio ( /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

Pero...

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

y

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


¿Cuál es el problema?
¿Es necesario hacer algo más?
¿Es necesario crear un script en /etc/init.d también?


Encontré el mismo problema. Por favor, intente el comando initctl en la consola. Para ingresar a la sesión de la consola, presione Ctrl + ALT + F1 e inicie sesión. (No puedo entender por qué, pero tuve éxito de esta manera)

Respuestas:


26

Por lo general, significa que tiene un error en el .confarchivo; por ejemplo, no estoy seguro de que la pidestrofa sea compatible con 10.04, stopno se pueda usar en el script, etc.

Intentaba comenzar el archivo desde cero (con solo start, stopetc.), y luego construirlo lentamente agregando más y más líneas y probándolo start pure-ftpd.

Por ejemplo:

# 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

La información en el wiki está muy desactualizada ( upstart.ubuntu.com/wiki ). Por otro lado, la versión inicial en Lucid es 0.6.5-8 y el archivo pid debe ser compatible: upstart.ubuntu.com/wiki/…
Juan Simón

1
AFAIK la pidestrofa se ha eliminado desde la versión 0.5.0 2008-08-12 "One of those deaf-mutes". No lo uses
organizar el

Alguien sabe dónde está la documentación actualizada?
Juan Simón

46

También puede ejecutar init-checkconfpara verificar la sintaxis

init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok

1
El comando no existe en 10.04, pero existe en 12.04.
Mark Stosberg

66
Pero no funciona en un servidor Ubuntu 12.04 sin cabeza (todavía). Ver bugs.launchpad.net/upstart/+bug/881885
FvD

1
¡Encontré el problema de inmediato! - Debería estar integrado en el startcomando para que le dé un mensaje de error más informativo ...
AL

26

Primero, puede verificar que su trabajo realmente sea conocido por advenedizo:

sudo initctl list | grep your_job_name

... donde your_job_nameestá el nombre de su script de inicio menos la .confextensión.

Si no se encuentra, puede intentar volver a cargar la configuración y luego volver a verificar:

sudo initctl reload-configuration

# re-check
sudo initctl list | grep your_job_name

Luego intente nuevamente para comenzar su trabajo:

sudo start your_job_name

Si no estaba iniciando sesión /var/log/daemon.logo /var/log/syslogantes, es posible que tenga algunos ahora.


1
¿Y si esto muestra que no se sabe que el trabajo se inicia, aunque la sintaxis es correcta y reside en / etc / init?
FvD

1
¿Intentó "sudo initctl reload-configuration" como se sugiere? ¿Verificó permisos, registros, documentos?
Mark Stosberg

Lo hice, y lo hice nuevamente después de leer tu comentario. Incluso se aseguró de que el usuario fuera un usuario del sistema (useradd -r). Quizás puede haber algo más mal, no relacionado con el arranque, por lo que publiqué un problema para los desarrolladores del servicio que estoy tratando de iniciar (es un servidor brillante que estoy tratando de iniciar en el arranque).
FvD

1
¡Y eran permisos después de todo! a pesar de que todo parecía color de rosa al enumerar el directorio, solo después de que un chmod 644 iniciara la secuencia de comandos. Gracias de nuevo.
FvD

1
Recuerde, your_job_name no tiene el final .conf del archivo. Me llevó una hora averiguarlo.
Marcel

6

La referencia más relevante para la sintaxis del archivo de trabajo estará disponible cuando ejecute el comando:

man 5 init

en su sistema Para Ubuntu 10.04, como encontraste en la respuesta anterior, la sintaxis del archivo pid es incorrecta.

Cada vez que recuperas el error de "trabajo desconocido", es una buena idea revisar los registros (antes del 11.04, /var/log/daemon.log, 11.04 y superior, todo va en / var / log / syslog)

Puede ver un error como este:

init: /etc/init/test.conf:2: Unknown stanza

3

De todos modos, estoy aquí porque tuve el mismo problema, pero mi sintaxis era 100% correcta.

Después de algunas depuraciones descubrí otro problema que puede causar este error de " Trabajo desconocido" :

upstarts usa inotify para monitorear cambios de archivos .conf y trabajos de instalación automática, esto es muy bueno (¡para esto no necesita algo como update.rc con upstart!) pero puede no ser perfecto si usted (como yo en ese caso) usa algunos programas FTP / SCP GUI para cargar y editar configuraciones en servidores remotos, el trabajo puede desinstalarse silenciosamente al inicio cuando edita el archivo de esa manera.

para arreglar, simplemente haz eso (eso me salvó)

touch /etc/init/*

generará eventos de inotify para actualizar todas las confs iniciales.


2

Tuve el mismo problema en mis contenedores Docker de Ubuntu 14.04. Como resultado, la imagen de Ubuntu 14.04 (si no otras) para Docker no es compatible con Upstart de la misma manera que lo haría una máquina virtual completa.

Para responder a esta pregunta, por qué el servicio no se inicia, es porque initctl no es un programa Upstart real: está asignado a / bin / true.

Para verificar, ejecute lo siguiente en un contenedor Docker de Ubuntu 14.04 vs. Vagrant y vs. una gota de DigitalOcean

$ ls -al /sbin/initctl

Verá que initctl no es lo mismo en Docker frente a los demás.

Un enlace que puede mejorar su comprensión. Https://github.com/docker/docker/issues/1024


2
Se encontró con el mismo problema con Docker: en resumen y para resumir, Docker solo ejecuta un proceso a la vez, por lo que no puede ejecutarse en el arranque y algo más. Para asegurarme de reiniciar el servicio si / cuando muere, terminé usando supervisor. PD: no debe ejecutar múltiples servicios en un contenedor: el objetivo de usar contenedores es construir micro servicios, así que construya las piezas en contenedores separados y
únalas

1
Acabo de encontrarme con este artículo y eso da muy buenos consejos sobre cómo separar las preocupaciones: blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker, que probablemente sea el par mejor estrategia para usar que para usar supervisor
MrE
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.