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
Но ... [ 119]
# start pure-ftpd
start: Unknown job: pure-ftpd
и
# service pure-ftpd start
start: Unknown job: pure-ftpd
В чем проблема?
Нужно ли делать что-то еще?
Нужно ли создавать один скрипт и в /etc/init.d?
В любом случае, я здесь, потому что у меня была та же проблема, но мой синтаксис был на 100% правильным.
После некоторой отладки я обнаружил еще одну проблему, которая может вызвать эту ошибку «Неизвестная работа» :
выскочки использует inotify для мониторинга. изменения в файле conf и задания автоматической установки, это очень круто (для этого вам не нужно что-то вроде update.rc с upstart!) , но это может быть не идеально, если вы (как и я в этом случае) используете В некоторых программах FTP / SCP GUI для загрузки и редактирования конфигураций на удаленных серверах задание может быть автоматически удалено программой upstart при редактировании файла таким образом.
чтобы исправить, просто сделайте это (что спасло меня)
touch /etc/init/*
он будет генерировать события inotify, чтобы обновить все выскочки конф.
Обычно это означает, что у вас есть ошибка в файле .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
Наиболее релевантная ссылка на синтаксис файла задания будет доступна при запуске команды:
man 5 init
в вашей системе. Для Ubuntu 10.04, как вы обнаружили в предыдущем ответе, синтаксис файла pid неверен.
Каждый раз, когда вы получаете сообщение об ошибке «неизвестное задание», полезно проверить журналы (до 11.04, /var/log/daemon.log, 11.04 и выше, все идет в / var / log / syslog) 114]
Вы можете увидеть такую ошибку:
init: /etc/init/test.conf:2: Unknown stanza
Во-первых, вы можете проверить, что ваша работа на самом деле известна как выскочка:
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
раньше, у вас, возможно, уже есть некоторые.
У меня была та же проблема с моими контейнерами Ubuntu 14.04 Docker. Как оказалось, образ Ubuntu 14.04 (если не другие) для Docker не поддерживает Upstart так же, как полноценная виртуальная машина.
Чтобы ответить на этот вопрос, почему служба не запускается, это потому, что initctl не является реальной программой Upstart: она сопоставлена с /bin/true.
Чтобы проверить, выполните следующие действия для контейнера Ubuntu 14.04 Docker против Vagrant и против капли DigitalOcean
$ ls -al /sbin/initctl
Вы увидите, что initctl в Docker отличается от других. 115]
Ссылка, которая может углубить ваше понимание .. https://github.com/docker/docker/issues/1024
Вы также можете запустить init-checkconf
для проверки синтаксиса
init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok