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
を使用してジョブを開始できると期待しています。私は何を誤解しましたか?
ありがとう
いくつかのポイント:
Ubuntuでは、ユーザージョブはデフォルトで有効になっていません。見る:
あらゆる種類のUpstartジョブを作成した後に再起動する必要はありません。それらはUpstartによって自動的に検出されます(inotifyを使用)。
service
コマンドはUpstartの一部ではありません。SysVジョブを操作するSystemVツールです。ただし、UpstartはSystemVとの互換性を提供するため、Upstartシステムジョブはservice
経由でも操作できます(便宜上)。 Upstartの同等のコマンドは、start
、stop
、およびrestart
です。
ユーザージョブの場合は、start
、stop
、およびrestart
(またはinitctl
と同等のもの)を使用する必要があります。
最後に、ユーザージョブは現在非常に基本的なものであることに注意してください。 12.10では大幅に強化する予定ですが、現時点では次の点に注意してください。
/bin/sh -e
を使用してallユーザージョブを実行します。 -e
も非常に重要です(詳細はman sh
)。Upstartは、ユーザーのジョブ環境で最小限の変数セットのみを設定します。したがって、おそらく次のようにHOME
のような変数を設定する必要があります。
env HOME=/home/james
見る: