Сценарій запуску не запускається


33

Ubuntu 10.04

Я створив цей початковий сценарій ( /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

Але ...

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

і

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


В чому проблема?
Чи потрібно щось більше робити?
Чи потрібно також створити один сценарій у /etc/init.d?


Я зустрів ту саму неприємність. Спробуйте команду initctl на консолі. Щоб увійти до сеансу консолі, натисніть Ctrl + ALT + F1 та увійдіть у систему. (Я не можу зрозуміти чому, але мені це

Відповіді:


26

Зазвичай це означає, що у вас є помилка у .confфайлі - наприклад, я не впевнений, що pidстрофа підтримується в 10.04, stopне може бути використана в сценарії і т.д.

Я б спробувати запустити файл з нуля (з тільки start, і stopт.д.), а потім повільно нарощувати його, додаючи все більше і більше ліній та тестування з допомогою start pure-ftpd.

Наприклад:

# 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

Інформація у вікі дуже застаріла ( upstart.ubuntu.com/wiki ). З іншого боку, версія для запуску в Lucid становить 0,6.5-8, і слід підтримувати pid-файл: upstart.ubuntu.com/wiki/…
Juan Simón,

1
AFAIK pidстрофу видалено з моменту версії 0.5.0 2008-08-12 "One of those deaf-mutes". Не використовуйте його.
влаштовуйте

Хтось знає, де знаходиться оновлена ​​документація?
Хуан Сімон

46

Ви також можете запустити, init-checkconfщоб перевірити синтаксис

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

1
Команди не існує в 10.04, але вона існує в 12.04.
Марк Стосберг

6
Але він не працює на безголовому сервері Ubuntu 12.04 (поки що). Дивіться bugs.launchpad.net/upstart/+bug/881885
FvD

1
Виявили проблему відразу! - Повинно бути вбудовані в startкоманду , так що це дає вам повідомлення про помилку більш інформативного ...
AT

26

По-перше, ви можете перевірити, чи справді ваша робота насправді відома:

sudo initctl list | grep your_job_name

... звідки your_job_nameназва вашого початкового сценарію мінус .confрозширення.

Якщо його не знайдено, можна спробувати перезавантажити конфігурацію та повторно перевірити:

sudo initctl reload-configuration

# re-check
sudo initctl list | grep your_job_name

Потім спробуйте знову почати свою роботу:

sudo start your_job_name

Якщо ви не отримували жодного входу в систему /var/log/daemon.logабо /var/log/syslogраніше, можливо, зараз у вас є деякі.


1
А що, якщо це покаже, що завдання невідомо для початку, навіть якщо синтаксис правильний і він знаходиться в / etc / init?
FvD

1
Ви спробували "sudo initctl reload-configuration", як було запропоновано? Ви перевіряли дозволи, журнали, документи?
Марк Стосберг

Я так і зробив знову, прочитавши ваш коментар. Навіть переконався, що користувач був користувачем системи (useradd -r). Можливо, може бути щось інше не так - пов’язане з початком роботи - тому я опублікував випуск розробникам служби, яку я намагаюся запустити (це блискучий сервер, який я намагаюся запустити під час завантаження).
FvD

1
І це були дозволи все-таки! незважаючи на те, що все виглядало підступно при перерахуванні реєстру, лише після того, як chmod 644 initctl підібрав сценарій. Знову дякую.
FvD

1
Пам'ятайте, що ваше ім'я_місії не має .conf закінчення файлу. Мені потрібна година, щоб дізнатися.
Марсель

6

Найбільш відповідна посилання на синтаксис файлу завдань буде доступна при запуску команди:

man 5 init

у вашій системі. Для Ubuntu 10.04, як ви виявили в попередній відповіді, синтаксис файлу pid неправильний.

Щоразу, коли ви отримуєте цю помилку "невідомої роботи", гарну ідею перевірити журнали (до 11.04, /var/log/daemon.log, 11.04 і більше, все входить у / var / log / syslog)

Можливо, ви побачите помилку:

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

3

У всякому разі я тут, тому що у мене була така ж проблема, але мій синтаксис був на 100% правильним.

Після деякої налагодження я виявив ще одну проблему, яка може спричинити цю помилку "Невідома робота" :

вискочок використовує Inotify контролювати .conf зміни файлів і автоматичної установки робочих місць, це дуже здорово (для цього вам не потрібно що - щось на зразок update.rc з вискочкою!) , але може бути не досконалим , якщо ви (як і я в цьому випадку) використання деяку програму FTP / SCP GUI для завантаження та редагування конфігурацій на віддалені сервери, завдання можна безшумно видалити запущеним запуском, коли ви редагуєте файл таким чином.

виправити просто зробити це (що мене врятувало)

touch /etc/init/*

це призведе до ініціації подій, щоб оновити всі початкові конфлікти.


2

У мене була така ж проблема в моїх контейнерах Ubuntu 14.04 Docker. Як виявляється, зображення Ubuntu 14.04 (якщо не інші) для Docker не підтримує Upstart таким же чином, як і повна віртуальна машина.

Щоб відповісти на це запитання, чому служба не запускається, це тому, що initctl не є фактичною програмою Upstart: вона відображається на / bin / true.

Для перевірки запустіть наступне на контейнері Dobu Ubuntu 14.04 проти Vagrant та краплі DigitalOcean

$ ls -al /sbin/initctl

Ви побачите, що initctl не є тим самим у Докера проти інших.

Посилання, яке може продовжити ваше розуміння .. https://github.com/docker/docker/isissue/1024


2
Зустрівшись із тією ж проблемою, що і з docker: коротко кажучи, підсумовуючи, docker запускає лише один процес за один раз, тому він не може запускатися на початку та щось інше. Щоб переконатись у перезапуску служби, якщо / коли вона загине, я в кінцевому підсумку використовував нагляд. PS: Вам не слід запускати кілька служб у контейнері: вся суть використання контейнерів полягає у створенні мікросервісів, тому будуйте шматки в окремих контейнерах та
з'єднуйте

1
Я щойно наткнувся на цю статтю, і це дає дуже хороші поради щодо того, як розділити проблеми: blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker, що, мабуть, рівномірне краща стратегія для використання, ніж використання супервізора
MrE
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.