Стартовый скрипт не запускается

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 тоже?

    
задан Juan Simón 17.03.2011 в 17:22
источник

6 ответов

24

Обычно это означает, что у вас есть ошибка в файле .conf - например, я не уверен, что pid stanza поддерживается в 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
    
ответ дан arrange 17.03.2011 в 18:44
источник
45

Вы также можете запустить init-checkconf для проверки синтаксиса

init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok
    
ответ дан Stefano Gargiulo 13.03.2013 в 02:34
26

Сначала вы можете проверить, что ваша работа действительно известна выскочкой:

sudo initctl list | grep your_job_name

Если он не найден, вы можете попробовать перезагрузить конфигурацию, а затем перепроверить:

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 , у вас могут быть некоторые из них.

    
ответ дан Mark Stosberg 06.05.2013 в 20:25
6

Наиболее подходящая ссылка для синтаксиса файла задания будет доступна при запуске команды:

man 5 init

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

Всякий раз, когда вы возвращаете ошибку «неизвестного задания», рекомендуется проверить журналы (pre 11.04, /var/log/daemon.log, 11.04 и выше все идет в / var / log / syslog)

Вы можете увидеть ошибку, подобную этой:

init: /etc/init/test.conf:2: Unknown stanza
    
ответ дан SpamapS 28.03.2011 в 20:10
3

В любом случае я здесь, потому что у меня была такая же проблема, но мой синтаксис был на 100% правильным.

После некоторой отладки я обнаружил еще одну проблему, которая может вызвать эту ошибку «Неизвестное задание» :

выскочки использует inotify для мониторинга изменений файла .conf и заданий автоматической установки, это очень классно (для этого вам не нужно что-то вроде обновления. rc с выскочкой!) , но может быть не идеальным, если вы (как и я в этом случае) используете некоторую программу FTP / SCP GUI для загрузки и редактирования конфигураций на удаленных серверах, задание может быть тихо удалено выскочкой при редактировании файл таким образом.

, чтобы исправить просто сделать это (который меня спас)

touch /etc/init/*

он будет генерировать события inotify для обновления всех upstart confs.

    
ответ дан Stefano Gargiulo 13.03.2013 в 02:48
2

У меня была такая же проблема в моих контейнерах Docker Ubuntu 14.04. Как оказалось, изображение Ubuntu 14.04 (если не другие) для Docker не поддерживает Upstart так же, как полная виртуальная машина.

Чтобы ответить на этот вопрос, почему служба не запускается, это происходит потому, что initctl не является реальной программой Upstart: она отображается в / bin / true.

Чтобы проверить выполнение следующих действий в контейнере Docker Ubuntu 14.04 против Vagrant и в сравнении с капелькой DigitalOcean

$ ls -al /sbin/initctl

Вы увидите, что initctl не то же самое в Docker и других.

Ссылка, которая может помочь вам понять. Ссылка

    
ответ дан Johnathan J. 28.09.2014 в 17:47