问题描述
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
是新手脚本的名称减去.conf
扩展名。
如果找不到,您可以尝试重新加载配置,然后re-checking:
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%正确的。
经过一些调试后,我发现了另一个可能导致此”Unknown job”错误的问题:
upstarts使用inotify监视.conf文件更改和自动安装作业,这非常酷(为此你不需要像up.art这样的update.rc!)但是如果你(像我那样)使用它可能不完美一些FTP /SCP GUI程序用于在远程服务器上上传和编辑配置,当您以这种方式编辑文件时,可以通过upstart以静默方式卸载该作业。
简单地解决这个问题(救了我)
touch /etc/init/*
它将生成inotify事件以刷新所有新贵的confs。
第六种方法
我在Ubuntu 14.04 Docker容器中遇到了同样的问题。事实证明,Docker的Ubuntu 14.04映像(如果不是其他映像)不支持Upstart,就像完整虚拟机一样。
要回答这个问题,为什么服务没有启动,这是因为initctl不是一个真正的Upstart程序:它被映射到/bin /true。
验证在Ubuntu 14.04 Docker容器与Vagrant以及DigitalOcean droplet上运行以下命令
$ ls -al /sbin/initctl
你会发现在Docker和其他人中,initctl并不相同。
一个链接,可以进一步了解.. https://github.com/docker/docker/issues/1024