システム起動時にupstartサービスが開始されないのはなぜですか?


37

この質問に続いて、次のように、ヘッドレスUbuntu Server 11.04ボックス用のシンプルなスタートアップサービス(/etc/init/pms.conf)を作成しました。

start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn

exec /home/administrator/pms-current/PMS.sh

コマンドラインからこのサービスを自由に開始(または停止)できます。

service pms start

そして、実際に実行されていることがわかります。

ただし、最初にマシンを起動すると、サービスは開始されません。ボックスにSSH接続して、サービスのステータスを確認すると、次のメッセージが表示されます。

$ service pms status
pms stop/waiting

私の質問は、なぜこれが起こっているのですか?ブート時にサービスが開始されないのはなぜですか?

更新1:私のサービスが開始され、その後死にかけているのか、まったく開始されていないのかがわからないため、次をPMS.shに追加しました。

echo "STARTED" > $STARTLOG

これは明らかに私が探すべきものを与えてくれます。自分でサービスを開始してからstart.logをチェックして、これをテストしました。次に、start.logを削除して再起動しました。再起動後には存在しなかったため、upstartがサービスを開始していないようです。私はそれがプロセスの初期の段階で死んでいる可能性があると思いますが、それがすべての単純さを考えると、それはむしろありそうにないようです。

更新2:アップスタートアップグレードを含む11.10にアップグレードしましたが、この問題は引き続き発生します。

更新3:要求どおり、で起動しました--debug。catの出力は/var/log/syslog | grep init長すぎて質問に入れることができませんが、ここで表示できます

更新4:より多くのログ、今回はupstart confが上部に含まれています。1実行し、2を実行します


スクリプトが実行されなかったのは確かですか?pms stop / waitingメッセージは、起動ジョブが実行され、すべてのコマンドが正常に終了したことを意味します。
手配

出力を追加cat /var/log/syslog | grep initで指示に従って使用した成り上がりのブートlogggingを有効にした後、成り上がりのデバッグ
シアランLiedemanを

@Anarci:私の質問のアップデート3をご覧ください。
ケントブーガート

ほとんどのユーザーは、そのような電子メールアドレスを提供せず、Ubuntu
pastebinの

@Anarci:完了-私の質問をご覧ください。
ケントブーガート

回答:


19

たとえば、開始前/開始後のエントリを使用して、ジョブの詳細度を上げることをお勧めします。

pre-start script
  logger "pre-start for myprog"
end script

post-start script
  logger "post-start for myprog"
end script

# and for PMS itself:
script
  logger "just before executing PMS"
  exec /home/administrator/pms-current/PMS.sh
end script

詳細については、http://upstart.ubuntu.com/cookbook/をご覧ください。

また、見ていhttp://upstart.ubuntu.com/wiki/Debuggingを


これは本当に私の頭の中にあります。私はあなたの投稿の裏側でさまざまなことを試しました。ログにさまざまな不明瞭なメッセージが表示され、すべてが失敗しました。私の最新の試みはinitをもたらしました:pmsメインプロセス(1329)はステータス143終了しました。私がいることがわかりますPMS.shはそれが最初に行うことは、独自のログへの書き込みで、そのログエントリが存在しないためにも開始されていません。ターゲットファイルが存在し、実行可能であることを示す、開始前の出力を確認できます。明日もこれを取り上げますが、アイデアがあればぜひ聞いてください。ありがとう。
ケントブーガート

こんにちは、@ KentBoogaart、同じ問題を抱えているようです。解決策を見つけましたか?
ダニエレB

@KentBoogaart私はあなたと同じ問題を抱えていますか?あなたの運はありますか?
メビンバブ

14

おそらくここで起こっているのは、ネットワークアダプタが起動する前に、おそらくループバックアダプタ(lo)の前にpmsが起動していることです。PS3 Media Serverについて話していると仮定すると、それはネットワーク化されたサービスであり、おそらく利用可能なインターフェイスがない状態で起動するのは好きではありません。

基準の開始を次のように変更してみてください。

start on filesystem and net-device-up IFACE!=lo

つまり、「実際の」ネットワークインターフェイスが起動した後に開始します。ただし、eth0が次のインターフェイスである場合、PMSは起動しますが、PMSにwlan0を使用させたい場合は、これは理想的ではないかもしれません。サービスは開始されますが、リッスンするインターフェイスを選択できなかった可能性があります。ストリーミングするインターフェイスを知っていて、変更されないものと仮定して、ジョブにハードコードします。たとえば:

start on filesystem and net-device-up IFACE=wlan0

Oneiric(11.10)では、イベントstatic-network-upを使用して、静的に構成されたすべてのデバイスを待機できます。これは、インターフェイスをハードコーディングせずにネットワーク依存のジョブを作成できるため便利です。[注:「静的に構成されたすべてのデバイス」とは/etc/network/interfaces、NetworkManagerの代わりに使用することを指します。静的IPとDHCPの意味で静的という意味ではありません。]


これはトリックのように聞こえましたが、うまくいきませんでした。私は持っているだけですがloeth0あなたの2番目の提案を使用しました:start on filesystem and net-device-up IFACE=eth0。再起動後もまだ行かない。PMSログで、リードの可能性があることに気付きました。私は...調査し、返されます
ケントBoogaart

それは面白いです。言及しなかったことの1つは、元のスクリプトを試してみたところ、それが私のマシンのブートで機能したことです。私はそれをドローの幸運だけに帰しました(つまり、私のレース状態では、良い車が勝ち、あなたのものでは悪い車が勝ちました)。ここで他にどのような依存関係がないのか、本当にわかりません。奇妙な。
マークラッセル

2
起動後に起動できるため、別のサービス依存関係が欠落している必要があります。動作する可能性のある汚いハックの1つ(ただし、まったく説明しません)はsleep 10、シェルスクリプトを実行する前に、「事前起動スクリプト」にドロップするだけです。
マークラッセル

申し訳ありませんがマーク-しかし、私たちは同じページにいます。事前起動スクリプトで既にスリープ10を試しました。立ち入り禁止。次に、debug.logを完全に削除して再起動してみました。起動後、サービスステータスは同じで、debug.logファイルはありませんでしたので、PMSが実際に実行されているとは確信していません。これを診断する簡単な方法はありますか?PMS.shを変更して出力を吐き出すと、どこに行きますか?私は常に自分のファイルにそれを向けることができると思います-次にショットを与えるかもしれません。
ケントブーガート

質問を詳細情報に更新しました。
ケントブーガート

3

syslogの調査から、pmsプロセスはエラーなしで開始されますが、しばらくすると、その目標が開始から停止に変更されて終了します。

repsawn句を追加しているので、これは少し奇妙です。停止した後、再起動を試行する必要がありますが、実行しません。だから私はあなたがrespawn句を削除したと推測しています。

pmsサービスの開始と停止の間に、2つのサービスだけがufwとネットワークインターフェイス(eth0)を開始し、1つがudev-fallback-graphicsを開始します。

pmsを並行して開始しているようです。残念ながら、スタートアップのドキュメントは、start on ...バニラとstart on starting ...との正確な違いについて少し曖昧start on started ...です。

スタートアップスタンザを次のように変更してみてください

start on started networking

またはちょうどあまりにも

start on net-device-up IFACE=eth0

ログ出力は、net-device-upイベントがかなり遅れて来ますが、pmsはその前に開始するため、少し奇妙です。

これにより、すべてのネットワーク設定が終了した後、つまりジョブが開始されただけでなく終了した後にのみプロセスが開始されるようになります。

また、ログ出力を完全に信頼しないでください。起動プロセスの早い段階で、ファイルへのログ出力が常に機能するとは限りません。Upstartのデバッグの回答を参照してください


3

代わりにランレベルで開始を使用して、同様の問題を修正することができました。

start on runlevel [2345]

3

私は同じ問題を抱えていましたが、最終的には次のように簡単に解決しました:

start on runlevel [2345]

どのなしnet-device-upまたはstarted networkingもの

これは完全なスタートアップスクリプトであり、完全に機能します。

# MyApp

description     "MyApp"
author          "me"

start on runlevel [2345]
stop on runlevel [016]

respawn

exec /usr/bin/myapp 2>> /var/logs/myapp.log

1

私は出くわしたchkconfig私のRHCSA / CEのトレーニング中:

sudo apt-get install chkconfig
sudo chkconfig pms on

その機能の詳細については、Oneiricのmanページで確認できます。


1

これに対する解決策を見つけましたが、理解できません。rootを所有者としてPMSを出し入れする/home/administrator/bin/pms、すべて正常に動作します。

そのままにして/home/administrator/、ルートが/home/administrator/ディレクトリ自体のすべての所有者であることを確認すると、まだ機能しません。

管理者をすべての所有者として設定し、スクリプトの関連部分を次のように変更した場合:

sudo su administrator -c '/home/administrator/pms-current/PMS.sh'

それでも動作しません。

今のところ、/home/root/ディレクトリを作成してすべてをそこに移動すると思いますが、これを完全に理解したいと思います。


だから、chkconfigどちらも機能しませんでしたか?ディレクトリPMS.shをルートに入れてみましたか?ソリューションのみが機能する場合は、UpstartのLaunchpadページにアクセスして、開発者に直接連絡してください。
-Oxwivi

そして、移動するだけで十分であれば、.shすべてをそこに残し、スクリプトを編集してそのディレクトリを指すようにします(またはディレクトリを変更しますか?)。
オックスウィビ

はい、ルートが所有するPMSディレクトリ全体を作成しようとしました。/ home / administrator /がrootによって所有されていないため、おそらく機能しませんでした。
ケントブーガート

とにかくこれは意味がありません。問題なくupstartを使用して/ homeディレクトリでスクリプトを定期的に実行しています。
手配

見知らぬ人でも:私は/ home / root /の下にあるすべてのものを試しましたが、これは明らかにrootが所有しています。うまくいきませんでした。すべてを/ bin / pmsの下に戻したところ、再び機能しました。したがって、私のシステムでは/ homeからPMSを起動しようとしてもうまくいきません。
ケントブーガート

1

スクリプトが自宅にあるファイルに依存しており、標準のubuntuメカニズム(.Private)で暗号化されているため、ホームにアクセスできないことに気付いたとき、同様の「開始なし」の問題がありました。

start on local-filesystems イベントは(おそらく)復号化プロセスが終了する前に発行されます。


1

ホームディレクトリはNFSにありますか?ルートがNFSにアクセスできない場合があります。

記録のために、12.04のちょっとしたテストで:

  • start on started networking動作しstart on network-interface-up INTERFACE=eth0 ませんが、

  • start on started network-interface INTERFACE=eth0 します。

http://os4.org/wiki/upstart.htmlに、 ジョブネットワーキングが停止しているとinitctl list 常に表示されることを指摘してくれてありがとう。


参照されているリンクが壊れています。
-slm


0

@xuhccと同様に、Vagrant Upstartスクリプトが実行されなかった理由を見つけるためにここに来ました。以下が動作するはずです。

浮浪者がマウントされた状態で開始

ただし、一部のビルドでは、次のバグが原因で発生しません。

https://github.com/mitchellh/vagrant/issues/6074

レポートに記載されている回避策は、私にとって非常に効果的でした。

$ cat /etc/init/workaround-vagrant-bug-6074.conf 
# workaround for https://github.com/mitchellh/vagrant/issues/6074
start on filesystem
task

env MOUNTPOINT=/vagrant

script
  until mountpoint -q $MOUNTPOINT; do sleep 1; done
  /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=$MOUNTPOINT
end script

私のために働いた


0

それは私のために働いた(iface up後にサービスを開始する必要があります):

start on started networking and net-device-up IFACE=wlan1 
stop on shutdown

respawn
respawn limit 10 10
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.