Upstart скрипт не запускается
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?
6 ответов
Обычно это означает, что у вас есть ошибка в .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
Вы также можете запустить init-checkconf
проверить синтаксис
init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok
Во-первых, вы можете проверить, что ваша работа на самом деле известна как выскочка:
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
раньше, вы могли бы иметь некоторые сейчас.
Наиболее актуальная ссылка на синтаксис файла задания будет доступна при запуске команды:
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
В любом случае, я здесь, потому что у меня была та же проблема, но мой синтаксис был на 100% правильным.
После некоторой отладки я обнаружил другую проблему, которая может вызвать эту ошибку "Неизвестная работа":
upstarts использует inotify для отслеживания изменений файла.conf и заданий автоматической установки, это очень круто (для этого вам не нужно что-то вроде update.rc с upstart!), но может быть не идеально, если вы (как и я в этом случае) используете В некоторых программах FTP/SCP GUI для загрузки и редактирования конфигураций на удаленных серверах задание может быть автоматически удалено программой upstart при редактировании файла таким способом.
чтобы исправить просто сделать это (это спасло меня)
touch /etc/init/*
он будет генерировать события inotify, чтобы обновить все выскочки конф.
У меня была такая же проблема в моих контейнерах 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 по сравнению с другими.
Ссылка, которая может помочь вам понять. https://github.com/docker/docker/issues/1024