Upstart脚本无法启动

Ubuntu 10.04

我创建了这个upstart脚本( /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中创建一个脚本?

它通常意味着.conf文件中有错误 – 例如我不确定10.04中是否支持pid节,不能在脚本中使用stop等。

我尝试从头开始创建文件(只有startstop等),然后通过添加越来越多的行并通过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是upstart脚本的名称减去.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进行任何日志记录,那么现在可能会有一些/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文件更改和自动安装作业,这非常酷(为此你不需要像up.art这样的update.rc!)但如果你(就像我在那种情况下)使用它可能不完美一些FTP / SCP GUI程序用于在远程服务器上上传和编辑配置,当您以这种方式编辑文件时,可以通过upstart以静默方式卸载该作业。

简单地解决这个问题(救了我)

 touch /etc/init/* 

它将生成inotify事件以刷新所有新贵的confs。

我在Ubuntu 14.04 Docker容器中遇到了同样的问题。 事实certificate,Docker的Ubuntu 14.04映像(如果不是其他映像)不支持Upstart,就像完整虚拟机一样。

要回答这个问题,为什么服务没有启动,这是因为initctl不是一个真正的Upstart程序:它被映射到/ bin / true。

validation在Ubuntu 14.04 Docker容器与Vagrant和DigitalOcean droplet上运行以下命令

 $ ls -al /sbin/initctl 

您会看到Docker与其他人的initctl不同。

可以进一步理解的链接.. https://github.com/docker/docker/issues/1024