当前位置: 首页>>技术教程>>正文


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是新手脚本的名称减去.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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2312.html,未经允许,请勿转载。