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
等。
我尝试从头开始创建文件(只有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
是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