アップスタートスクリプトが起動しない


33

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にも1つのスクリプトを作成する必要がありますか?


同じトラブルに遭遇しました。コンソールでinitctlコマンドを試してください。コンソールセッションを開始するには、Ctrl + Alt + F1を押してログインします。(私は理由を理解することはできませんが、私はこの方法をsuccessed)

回答:


26

通常、.confファイルにエラーがあることを意味します。たとえば、pidスタンザが10.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)。他の側では、明晰で成り上がりのバージョンは0.6.5-8ですとPIDファイルがサポートする必要があります。upstart.ubuntu.com/wiki/...
ファン・シモン

1
私の知る限り、pidスタンザはバージョンから削除されました0.5.0 2008-08-12 "One of those deaf-mutes"。使用しないでください。
手配

誰かが更新されたドキュメントがどこにあるか知っていますか?
フアンシモン

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、それは...あなたに多くの有益なエラーメッセージが表示されますので、コマンド
AT

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 reload-configuration」を試しましたか?許可、ログ、ドキュメントを確認しましたか?
マークストースバーグ

あなたのコメントを読んだ後、私はやりました。ユーザーがシステムユーザーであることを確認しました(useradd -r)。おそらく他の何かが間違っているかもしれません-upstartとは無関係です-だから私は、私が起動しようとしているサービスの開発者に問題を投稿しました(これは、起動時に起動しようとしているshiny-serverです)。
FvD

1
そして、それは結局許可でした!dirをリストするときにすべてが桃色に見えたとしても、chmod 644がinitctlによってスクリプトを取得した後にのみ。再度、感謝します。
FvD

1
your_job_nameにはファイルの.conf拡張子が付いていないことに注意してください。調べるのに1時間かかりました。
マルセル

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%正しかったです。

デバッグ後、この「不明なジョブ」エラーを引き起こす可能性のある別の問題を発見しました。

新興企業の用途はinotifyを .confファイルの変更を監視するために、自動ジョブをインストールし、これは非常にクールです(これのためにあなたが!成り上がりとupdate.rcのようなものを必要としない)が、あなたならば(私のようなそのような場合には)完璧ではないことができ、使用リモートサーバー上の構成をアップロードおよび編集するためのFTP / SCP GUIプログラムを使用すると、その方法でファイルを編集するときにupstartによってジョブをサイレントアンインストールできます。

修正するには、単にそれを行います(それは私を救った)

touch /etc/init/*

すべてのupstart confを更新するためにinotifyイベントを生成します。


2

Ubuntu 14.04 Dockerコンテナでも同じ問題が発生しました。結局のところ、Docker用のUbuntu 14.04イメージ(他のイメージではない場合)は、完全な仮想マシンと同じようにUpstartをサポートしていません。

この質問に答えるために、サービスが開始されない理由は、initctlが実際のUpstartプログラムではないためです。これは/ bin / trueにマップされます。

Ubuntu 14.04 DockerコンテナとVagrant、およびDigitalOceanドロップレットで次を実行することを確認するには

$ ls -al /sbin/initctl

Dockerと他のinitctlは同じではないことがわかります。

理解を深めるためのリンク.. https://github.com/docker/docker/issues/1024


2
dockerで同じ問題に遭遇しました:要約すると、dockerは一度に1つのプロセスしか実行しないため、upstartなどを実行できません。サービスが停止した場合、またはサービスが停止したときにサービスを再起動するために、supervisordを使用することになりました。PS:コンテナーで複数のサービスを実行しないでください:コンテナーを使用する目的は、マイクロサービスを構築することです。そのため、個別のコンテナーにピースを構築し、Docker-Compose
MrE

1
私はこの記事に出会いましたが、それは懸念を分離する方法について非常に良いアドバイスを与えます:blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-dockerこれはおそらく偶数スーパーバイザーを使用するよりも使用する方が良い戦略
MrE
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.