web-dev-qa-db-ja.com

〜/ .init /内のユーザーupstartジョブが見つかりません

12.04を実行すると、~/.init/に次のアップスタートジョブがあります。

# myjob

start on net-device-up
stop on [!12345]

script

echo ">> hello from user script" >> ~/tmp/upstart.log

end script

マシンを再起動した後

service myjob start
# => myjob: unrecognised service

initctlはジョブをリストしますが、Sudoなしで実行するとエラーがスローされます。

initctl start myjob
# => initctl: Rejected send message, 1 matched rules; type="method_call", sender=":1.100" (uid=1000 pid=13349 comm="initctl start Thunderbird ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

serviceを使用せずにinitctlまたはSudoを使用してジョブを開始できると期待しています。私は何を誤解しましたか?

ありがとう

7
Dave Nolan

いくつかのポイント:

  1. Ubuntuでは、ユーザージョブはデフォルトで有効になっていません。見る:

  2. あらゆる種類のUpstartジョブを作成した後に再起動する必要はありません。それらはUpstartによって自動的に検出されます(inotifyを使用)。

  3. serviceコマンドはUpstartの一部ではありません。SysVジョブを操作するSystemVツールです。ただし、UpstartはSystemVとの互換性を提供するため、Upstartシステムジョブはservice経由でも操作できます(便宜上)。 Upstartの同等のコマンドは、startstop、およびrestartです。

  4. ユーザージョブの場合は、startstop、およびrestart(またはinitctlと同等のもの)を使用する必要があります。

最後に、ユーザージョブは現在非常に基本的なものであることに注意してください。 12.10では大幅に強化する予定ですが、現時点では次の点に注意してください。

  • Upstartは、デフォルトで使用するシェルに関係なく、/bin/sh -eを使用してallユーザージョブを実行します。 -eも非常に重要です(詳細はman sh)。
  • Upstartは、ユーザーのジョブ環境で最小限の変数セットのみを設定します。したがって、おそらく次のようにHOMEのような変数を設定する必要があります。

    env HOME=/home/james

見る:

12
jamesodhunt