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にも1つのスクリプトを作成する必要がありますか?
通常、.conf
ファイルにエラーがあることを意味します。たとえば、pid
スタンザが10.04でサポートされているかどうかわかりません。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
拡張子を除いたupstartスクリプトの名前です。
見つからない場合は、設定をリロードしてから再確認してください:
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%正しかったです。
いくつかのデバッグの後、この「不明なジョブ」エラーを引き起こす可能性のある別の問題を発見しました。
pstartsはinotifyを使用して.confファイルの変更と自動インストールジョブを監視します。これは非常にクールです(このために必要なものはありませんupdate.rcのようなupstart!)が、FTP/SCP GUIプログラムを使用してリモートサーバーの構成をアップロードおよび編集する場合、完璧ではない可能性があります。その方法でファイルを編集すると、upstartによってサイレントアンインストールされます。
修正するには、単にそれを行います(それは私を救った)
touch /etc/init/*
すべてのupstart confを更新するためにinotifyイベントを生成します。
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