起動時にinit.dスクリプトが実行されない


15

画面を使用して、専用サーバーでいくつかのCounter-Strikeゲームサーバーをホストしています。サーバーを起動/停止するときに実行する次のスクリプトがあります。

#! /bin/sh
# /etc/init.d/css-server
#

case "$1" in
  start)
    echo "Starting Nullus Imprimis war server..."
    screen -A -m -d -S css-war-server /home/css-servers/war-server/css/srcds_run -game cstrike +map de_dust2 +maxplayers 16 -autoupdate -port 2555 -tick 100 
    echo "Nullus Imprimis war server started"
    echo "Starting Nullus Imprimis pub server #1..."
    screen -A -m -d -S css-pub-server-1 /home/css-servers/pub-server-1/css/srcds_run -game cstrike +map de_dust2 +maxplayers 32 -autoupdate -port 2666 -tickrate 100
    echo "Nullus Imprimis pub server #1 started"
    ;;
  stop)
    echo "Stopping Nullus Imprimis war server..."
    screen -S css-war-server -X quit
    echo "Nullus Imprimis war server stopped"
    echo "Stopping Nullus Imprimis pub server #1..."
    screen -S css-pub-server-1 -X quit
    echo "Nullus Imprimis pub server #1 stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/css-servers {start|stop}"
    exit 1
    ;;
esac

exit 0

このスクリプト(と呼ばれるcss-servers)を/etc/init.d/システムの起動時に実行されることを意味します。ただし、アクティブな画面を使用してチェックすると、screen -ls実行中のものはありません。

Ubuntu Serverの起動時にこれらを実行するにはどうすればよいですか?

回答:


33

スクリプトが存在するだけで/etc/init.dは、起動時に実行するには不十分です。

スタートアップに追加するには、Ubuntuに通知する必要があります。

sudo update-rc.d css-servers defaults

次に、スクリプトが適切にフォーマットされている場合、実行可能ビットが設定されている場合、次のブートで開始する必要があります。/SoftwareCenterからインストールするパッケージは、apt-getこのコマンドまたはそれに相当するものを自動的に実行するため、通常は心配する必要はありませんそれについて。

すぐに起動したい場合は、直接呼び出すことができます:

sudo service css-servers start

これは非常に奇妙です。この時点まで、このupdate-rc.dコマンドを使用せずに起動時にスクリプトを実行します。スクリプトを更新した後、このコマンドを実行するまでスクリプトは実行されませんでした。ありがとう。ところで、どのようにして(update-rc.dで行ったように)起動時に実行から「登録解除」できますか?
ニコス

1
@ Nik-LzこのQ&Aは、upstartを使用したUbuntuの古いバージョンおよび廃止されたバージョンに関するものです。使用すべきではなく、代わりに現在のsystemd(完全に異なるサービスシステムを使用)を使用する必要があります。
マイケルハンプトン

7

最初の部分は完了です。 /etc/init.d初期化スクリプトの実行元です。ただし、それらは自動的に実行されません。

これらは、/etc/rc*.dディレクトリのシンボリックリンクで指定された順序で実行されます。各実行レベルには独自のディレクトリがあります。リンク名で始まるスクリプトKは停止パラメーターで実行され、名前で始まるスクリプトSはstartパラメーターで実行されます。慣例により、ファイル名はで始まるKか、S配列決定のために使用される2桁の数字が続く、とでスクリプトの名前で終わります/etc/init.d

リンクは手動で作成できますが、通常はスクリプトを使用して作成されます。汎用スクリプトupdate-rc.dはUbuntuで利用できます。このコマンドman update-rc.dは、誰が使用するかについてのドキュメントを提供します。あなたの場合に試してください:

sudo update-rc.d css-servers defaults

initスクリプトを使用して起動するには、次を試してください。

sudo /etc/init.d/css-servers start

通常、この方法でサーバーを起動および停止して、スクリプトが希望どおりに動作することを確認します。次に、実行update-rc.dして/etc/rc.dランレベルディレクトリに追加します。


1

ブート時にサービスが開始されない理由がわからない場合。ただし、サービスを手動で開始しようとすると、正常に機能しますservice <your service> start。その場合は、標準出力とエラー出力を何らかのファイルにリダイレクトしてみてください。これは、システムの起動中に開始されない理由の手がかりになるかもしれません。

たとえば、スクリプト内

case "$1" in
  start)
    echo "Starting Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  stop)
    echo "Stopping Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

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