Upstartスクリプトとstart-stop-daemon


8

起動スクリプトを作成するとスクリプトが複数回呼び出され、IRCdが約8回発生するという問題がありました。これを修正するために、start-stop-daemonを使用しました。

description "IRC Daemon Upstart Script"

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

respawn

nice -5

exec start-stop-daemon --start --chuid ircuser --chdir /home/ircuser/inspircd/run --exec /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

これは、次の点を除いて、期待どおりに機能します。

stop ircd

それはそれを停止すると言いますが、その後inspircdはまだ実行中です。

スクリプトが8つのインスタンスを開くのを停止するstart-stop-daemonを使用するよりも良い方法はありますか、またはstart-stop-daemonと互換性を持たせることができる方法はありますか?

回答:


6

私は完全には確信が持てませんが、inspircdは実行時に方法を分岐している可能性があるため、UpstartはそのPIDが実際にどこにあるかを認識していません。その場合は、Upstartがforkプロセスを処理するための2つのスタンザを持っているため、修正できます。

  • expect fork フォークするプロセスを1回キャッチします(imo、おそらくここではそうです)。
  • expect daemonこれは2回フォークキャッチ事... やっています。

だからこれを試してください:

description "IRC Daemon Upstart Script"

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

respawn
expect fork

nice -5

exec su bash -c "cd /home/ircuser/inspircd/run; /home/ircuser/inspircd/run/bin/inspircd -- --config=./conf/inspircd.conf" ircuser

それでもうまくいかない場合は、su-statementをチェックして、コマンドラインから機能することを確認してから、に変更expect forkしてもう一度試してみてくださいexpect daemon


bashラッパーを編集すると、効果よりも害が大きくなる可能性があります。これはより良いexecかもしれません:

exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

ありがとうございました!それはよりきれいに機能し、はいexpect fork問題を修正しました。ただし、「stop ircd」を呼び出してスクリプトを停止することはできません。しかし、私はそれなしで管理します(ps aux、kill)が、答えを修正してそれを行う方法を含めることができれば、私は非常に幸せなUbuntuユーザーになります;)
Liam Dawson

うーん-実行するsudo start ircdと、PIDが出力されます。それをps(例えば:)の最後に貼り付けた場合ps u -p <PID>、それは理にかなったプロセスを示していますか?そうでない場合でも、PIDの追跡ができないため、試してみてくださいexpect daemon
Oli

実際には、PIDは出力されず、コンソール出力が出力されます。まあ、ps auxkill <pid>罰金を動作しますが、私はそれがないている、より多くのブート時にスクリプトSTARTを行うことを懸念しました。ありがとう!
Liam Dawson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.