web-dev-qa-db-ja.com

スクリプトをdebianの起動とシャットダウンに追加する方法は?

タイトルはそれをかなり要約します。

サーバーアプリのstartup.shおよびshutdown.shをDebian OSの起動およびシャットダウンシーケンスに追加するにはどうすればよいですか?

12
Amir Arad

Debianでは、サービスとアプリケーションのブートおよびシャットダウンスクリプトを/etc/init.d/に配置する必要があります。

Debianはサンプルスクリプト/etc/init.d/skeletonを提供しており、特定のアプリケーションに合わせて変更できます。

準備ができたら、次を呼び出します。

# update-rc.d YOURAPP defaults

Debianに/etc/rc?.d/シンボリックリンクを追加してもらいます。

メニューまたはグラフィカルインターフェイスが必要な場合は、sysv-rc-confまたはksysvパッケージを参照してください。

15
MikeyB

スクリプトは/ etc/rc.localからexit 0という行の前に呼び出すことができます

アプリのシャットダウンについては、スクリプトを/ etc/rc0.dに置くことをお勧めします。大文字の[〜#〜] k [〜#〜]で名前を付け、次にこれらのスクリプトが実行される順序を指定する2桁の数字と名前を付ける必要があります。これはパラメーター "stop"で呼び出されますが、単純な停止スクリプトではこれを無視できます。

4
Brent

スタートアップについては this を見てください。

シャットダウンの場合、リンクを作成するか、スクリプトを/etc/rcX.dフォルダーの1つにコピーします。Xは、実行するランレベルです。 0はDebianのシャットダウンランレベルです。

3
squillman

Debian Jessie以降、古いinitプログラムはsystemd!に置き換えられました。

自分で確認してください。実行:ls -l /sbin/initとそれが何を指しているかを確認します。最近ではsystemd/sbin/init -> /lib/systemd/systemd)、より新しく、より良い初期化プログラム。


選択された回答と他の回答が古くなっています!!!


* System-Vツールを使用して古い方法でスクリプトをインストールすることはできますが、一般的に言って良い方法ではありません。

man systemd.serviceさんのコメント:*

サービスが特定の名前で要求されたがユニット構成ファイルが見つからない場合、systemdは同じ名前でSysV initスクリプトを探し、そのスクリプトからサービスユニットを動的に作成します。これは、SysVとの互換性のために役立ちます。この互換性は非常に包括的ですが、100%ではないことに注意してください。


新しいDebianシステム(Jessie、Stretch、Busterなど)の場合

思ったより簡単です。 (-:

ブートアッププログラムまたはシャットダウンプログラムをインストールするための新しい推奨方法を以下に示します。

systemdでは、最初にユニットファイルを作成します。ユニットファイルはほとんどが宣言ではなく、コードです。

次に、systemctlコマンドを使用して、そのユニットをenableまたはstartにします。

systemdは多くの作業を自動的に行うので、たとえば、重要なプログラムがクラッシュしたり強制終了した場合に自動的に再起動させることが簡単になります。また、デフォルトで必要な場所とタイミングでプログラムをシャットダウンします。


ここでsystemdの学習を開始:

Debianから および 他の場所 および etc および etc


最初に使用するマニュアルページ:

man systemd.unit-一般的なユニットファイルについて
man systemd.service-サービスユニットファイルについて。デーモン、およびシングルランプログラム。

man systemctl-コマンドラインユーザーインターフェイス
man journalctl-systemdが行ったことのログを表示

man systemd-initプログラム自体について


他にもさまざまなタイプのユニットファイルがあります。

man systemd.target-グループおよび共通の同期ターゲット用。

上記の基本を消化したら、man -k systemd他の関連するmanページを検索します。



何をするにしても、Debianでこれらを使用しないでください

  • update-rc.d --System-Vスタイルのinitスクリプトリンクのインストールと削除
  • sysv-rc-conf-initスクリプトリンクのようなSysVの実行レベルの構成
  • runlevel-以前および現在のSysVランレベルを出力します
  • BUM-[〜#〜] b [〜#〜] oot [〜#〜] u [〜#〜] p [〜#〜] m [〜#〜] anager-グラフィカルなランレベルエディター
  • systemadm-systemdシステムおよびサービスマネージャーのグラフィカルフロントエンド
    (ところで、著者はメールでそれが壊れすぎていると私に言った。)


例:

このユニットファイルは、起動時にNoIP.comデーモンを起動し、シャットダウンすると停止します。

このデーモンは、時々、現在のIPアドレスを送信してDDNSを更新します([〜#〜] d [〜#〜]動的[〜 #〜] dns [〜#〜][〜#〜] d [〜#〜] omain [〜#〜] n [〜#〜] ame [〜#〜] s [〜#〜] erver))プロバイダーのデータベース。これにより、私のドメイン名が移動先のコンピューターを指すようにします。

このユニットファイルは、システムの次の設定ファイルにあります:/etc/systemd/system/noip2.service

ユニットファイルの内容は次のとおりです。

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max Nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

手動で実行ユニットファイル(例:テスト用):

  • start with $ Sudo systemctl start noip2
  • restart with $ Sudo systemctl restart noip2
  • stop with $ Sudo systemctl stop noip2

システムの構成起動またはシャットダウン時にユニットファイルを自動的に実行するには:

  • 使用開始 with $ Sudo systemctl enable noip2
  • 使用終了$ Sudo systemctl disable noip2

ログを表示

  • $ Sudo journalctl -u noip2
1
Elliptical view

最も簡単なのは、既存のスクリプトを変更し、私のシステムで動作し、サウンドに使用することです:)

  • スタートアップ、変更/etc/init.d/rc.local、shをファイルの最後の前に追加します:(ログイン「画面」の直前に実行されます)
  • シャットダウン、変更/etc/init.d/halt、最初のコメントの直後のファイルの先頭にshを追加します(このスクリプトファイルによって呼び出される実際のシャットダウンコマンドの前に実行されます)
  • 再起動、シャットダウンと同じですが、/etc/init.d/reboot
1
chickensk