新贵脚本无法启动


33

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中创建一个脚本?


我遇到了同样的麻烦。请在控制台上尝试initctl命令。要进入控制台会话,请按Ctrl + ALT + F1并登录。(我不明白为什么,但是我这样成功了)

Answers:


26

这通常意味着您在.conf文件中有错误-例如,我不确定pid10.04是否支持该节,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

Wiki中的信息非常过时(upstart.ubuntu.com/wiki)。另一方面,Lucid中的新贵版本是0.6.5-8,并且应该支持pid文件:upstart.ubuntu.com/wiki/…–
JuanSimón

1
pid自该版本以来,AFAIK 节已被删除0.5.0 2008-08-12 "One of those deaf-mutes"。不要使用它。
安排

有人知道更新的文档在哪里?
JuanSimón

46

您还可以运行init-checkconf检查语法

init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok

1
该命令在10.04中不存在,但在12.04中确实存在。
马克·斯托斯伯格

6
但是,它在无头的Ubuntu 12.04服务器上尚无法使用。参见bugs.launchpad.net/upstart/+bug/881885
FvD

1
立即发现问题!-应该内置到start命令中,以便为您提供更多有用的错误消息...
2015年

26

首先,您可以检查一下您的工作实际上是暴发户:

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之前没有任何登录信息,那么现在可能已有一些登录信息。


1
并且,如果这表明作业不知道是新人,即使语法正确并且驻留在/ etc / init中,该怎么办?
FvD

1
您是否按照建议尝试“ sudo initctl重新加载配置”?您检查权限,日志,文档了吗?
Mark Stosberg

我做到了,并且在阅读您的评论后又做了一次。甚至确保该用户是系统用户(useradd -r)。也许还有其他错误-与新贵无关-所以我向我要​​启动的服务的开发人员发布了一个问题(这是我要在启动时启动的闪亮服务器)。
FvD

1
毕竟是权限!即使列出目录时所有内容看起来都是桃红色的,但只有在chmod 644之后initctl才会选择脚本。再次感谢。
FvD

1
请记住,your_job_name的文件末尾没有.conf。花了我一个小时才找到答案。
Marcel

6

运行命令时,将提供与作业文件语法最相关的参考:

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

3

无论如何,我在这里是因为我有同样的问题,但是我的语法是100%正确的。

经过一些调试后,我发现了另一个可能导致此“未知作业”错误的问题:

upstarts使用inotify监视.conf文件的更改和自动安装作业,这非常酷(为此,您不需要upstart那样的update.rc之类的东西!),但是如果您(在这种情况下像我这样)使用,可能并不完美一些FTP / SCP GUI程序来上传和编辑远程服务器上的配置,当您以这种方式编辑文件时,upstart可以静默卸载作业。

解决这个问题(省了我)

touch /etc/init/*

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


2

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

要回答这个问题,为什么服务不能启动,这是因为initctl不是实际的Upstart程序:它映射到/ bin / true。

要验证在Ubuntu 14.04 Docker容器,Vagrant和DigitalOcean Droplet上运行以下命令

$ ls -al /sbin/initctl

您会看到initctl在Docker与其他方面并不相同。

可能会加深您理解的链接。.https ://github.com/docker/docker/issues/1024


2
遇到与Docker相同的问题:总而言之,Docker一次只运行一个进程,因此无法运行upstart等。为了确保在服务终止时重新启动服务,我最终使用了supervisor。PS:您不应在一个容器中运行多个服务:使用容器的重点是构建微服务,因此请在单独的容器中构建各个部分,然后将它们与Docker-Compose结合在一起
MrE 2015年

1
我只是碰到了这篇文章,就如何分离问题提供了很好的建议:blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker,这可能甚至使用策略比使用主管更好的策略
MrE15 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.