web-dev-qa-db-ja.com

upstartジョブは、手動の開始/停止でのみ機能します

ネットワークの起動後にバックアップクライアントを起動するために、/etc/init/tsm.confに非常に小さなupstartジョブがあります。 service tsm start|stop|statusを使用して手動で開始/停止しても問題ありません。しかし、service tsm enabletsm: unrecognized serviceと言います。そのため、起動時に自動的に起動しません。 Sudo service --status-allは、既知のジョブのリストにも表示されません。

ここにあります:

start on started networking
stop on stopped networking

respawn

script
#!/bin/bash
dsmc schedule > /dev/null
end script

私はubuntu 12.04.4。を実行しますアップスタートバージョンは1.5-0ubuntu7.2です。誰も私を助けることができますか? :)

UPDATE

initctl listおよび他のinitctlコマンドを使用すると、私の仕事がわかります。

3
Alexander

私の経験では、何も「有効」にする必要はありません。confを/ etc/initに入れて楽しんでください。

スクリプトに次のような行を追加すると、スクリプトが実行されることを確認できます。

echo "alive" > /alive_and_well

これにより、スクリプトが実行される場合、ルートディレクトリにファイル「alive_and_well」が作成されます。

そうでない場合、問題は「start on」スタンザにある可能性が最も高いです。そのようなことのために私が使用するものは次のとおりです(動作することがわかっています)。

start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]

また、Upstartスクリプトのシバンはサポートされていないため、「#!/ bin/bash」は役に立ちません(AFAIK)。

3
Shnatsel

/etc/init.d/にリストされている他のupstartジョブを見てください。私のシステムでは、これらはすべて/lib/init/upstart-jobへのシンボリックリンクであり、serviceコマンドが機能します(Saucyを実行しています)。

serviceコマンドを機能させる場合は、同じシンボリックリンクを作成してみてください。

それ以外の場合は、startstop、およびrestartを直接使用します。

0
Robie Basak

サービスは実行されているように聞こえますが、期待する動作が見られません。特定のユーザーとして、または環境変数を設定して実行する必要がある場合は、それらを指定する必要があります。 dsmcコマンドがPATHにあることを確認するか、コマンドが存在するディレクトリーに変更します。

Upstart Cookbookから: http://upstart.ubuntu.com/cookbook/

環境変数:Upstartでは、ジョブ構成ファイルが定義されているジョブにアクセスできる環境変数を設定できます。環境変数は、envキーワードを使用して設定します。

env ENV_VAR=value

グループIDの設定:ジョブのプロセスを実行する前にグループに変更します。

setgid <groupname>

ユーザーIDの設定:ジョブのプロセスを実行する前にユーザーを変更します。

setuid <username>

ディレクトリの変更:ファイルシステムのルートではなく、指定されたディレクトリ内の作業ディレクトリでジョブのプロセスを実行します。

chdir <directory>
0
thinkmassive