起動時に/etc/rc.localのコマンドが実行されないのはなぜですか?


39

/etc/rc.localスクリプトには、起動時にTiny Tiny RSSの更新デーモンを起動するコマンドが1つありますが、起動時にスクリプトは実行されません。どうして?

/etc/rc.localファイル全体:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet

exit 0

/etc/rc.local 実行可能です:

# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local

/etc/init.d/rc.local 存在し、実行可能です:

# ls -l /etc/init.d/rc.local
-rwxr-xr-x 1 root root 801 Jul 27  2012 /etc/init.d/rc.local

/etc/init.d/rc.local このランレベルの起動時に実行されることになっています:

# runlevel 
N 2
# ls -l /etc/rc2.d/S99rc.local 
lrwxrwxrwx 1 root root 18 Sep 22  2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local

コマンドラインから/etc/rc.localを手動で呼び出すと、update_daemonがロードされます...

# /etc/rc.local
# ps ax | grep update_daemon2.php
2233 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
2234 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet

...この問題が修正されるまで、サーバーを再起動するたびに実行する必要があります。

同様の 質問が すでに存在しますが、これまでのところ、特定の問題に情報を適用することができませんでした。

rc.localのコマンドが起動時に実行されないのはなぜですか?


requiretty設定が原因である可能性があります。ログインしているときは、TTYでスクリプトを実行していますが、システムの起動中はTTYではありません。このリンクは、shell-tips.com / 2014/09/08 /…に役立ちます。ありがとうございます。
KICT

回答:


23

rc.localコマンドの実行中にエラーが発生した場合、スクリプトは終了します(-eフラグを記載#!/bin/sh -e)。

実行時にコマンドを実行しようとすると、いくつかの前提条件が満たされていない可能性がありrc.local、コマンドの実行は失敗します。

cpu知事を手動で設定しているときに同じことを経験しましたが、そうしませんrc.localでした。update-rc.d起動時にコマンドを実行するために使用する私のカスタム回避策は次のとおりです。

  1. myscript.shディレクトリ/etc/init.dに見出し付きでファイルを作成します。#!/bin/sh
  2. カスタムコマンドをコンテンツとして配置する
  3. 実行可能にする: sudo chmod +x /etc/init.d/myscript.sh
  4. さまざまなランレベルのスクリプトのシンボリックリンクを作成します。 sudo update-rc.d myscript.sh defaults

また、/etc/network/if-up.dスクリプトを確認し、ネットワークの起動時にコマンドをトリガーできるかどうかを確認できます。


答えてくれてありがとう。質問を投稿してから設定が変更されたため、回答が問題を解決したかどうかをテストできません。
xx 14年

ステップ4の機能を教えてください。私はに新たなんだupdate-rc.d
Mohith7548

7

rc.localで起動時に実行されない同様の問題がいくつかありました

シェードは私に次の答えを提供しました:

Ubuntuは現在systemdを使用しており、rc.localはデフォルトで「オフ」になっているサービスと見なされています。次のコマンドを入力して再起動すると、rc.localを「オン」にできます。

sudo systemctl enable rc-local.service

https://askubuntu.com/a/770033/395498

私は彼のソリューションをテストしていませんが、論理的に聞こえ、機能すると思います。しかしながら :

また、。/。config / autostart-scripts /にスクリプトを追加することでトリックを実行できるソリューションも見つかりました。


7
このエラーを取得しています。ユニットファイルにはインストール構成がありません(WantedBy、RequiredBy、Alias、[Install]セクションのAlias設定、およびテンプレートユニットのDefaultInstance)。これは、systemctlを使用して有効にすることを意図していないことを意味します。この種のユニットを使用する理由としては、1)別のユニットの.wants /または.requires /ディレクトリからシンボリックリンクすることにより、ユニットを静的に有効にすることができます。2)ユニットの目的は、要件に依存する他のユニットのヘルパーとして機能することです。
リファトエルデムサヒン

このエラーも発生しています。rc.localがオフになっている場合、代替手段は何ですか?
ベン

5

有効になっsudo sysv-rc-confているかどうかを試してみてくださいrc.local

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]

はい、有効です。
xx

このコマンドをインストールする必要がありますか?
-jcollum

1
@jcollumはい、それは同じ名前のパッケージからのプログラムです。インストールするには、次のように入力しますsudo apt install sysv-rc-conf
banan3'14

rc.local私のサービスリストにも載っていません!
ベン

5

rc.localスクリプトが実行可能であることを確認します。

sudo chmod +x /etc/rc.local

次に、有効にします。

sudo systemctl enable rc-local.service

システムを再起動するか、次を実行してスクリプトを手動で開始します。

sudo systemctl start  rc-local.service

次のコマンドを実行すると、サービスのステータスを表示できます。

$ sudo systemctl status rc-local.service
 rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) 
Drop-In: /lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: active (running) since Mon 2018-04-02 10:39:44 -03; 1s ago
  Process: 2044 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 2049 (svscanboot)
Tasks: 3
 Memory: 556.0K
CPU: 10ms
CGroup: /system.slice/rc-local.service

サービスを手動で有効にする必要はありません。ファイルが存在し、実行可能な場合、systemdは自動的にrc-localサービスを有効にします。
ムル

4

FWルールをロードする一部のホストサーバーでこの問題が発生しました。

これらのボックスでは、非常にすばやく再起動し、ロードステートメントで問題が修正される前にrc.localに「sleep 1」を設定するだけでした。FWルールをロードする前にインターフェースが落ち着くまでに少し時間がかかったと思います。


1
ありがとうございました。sleep 1私の問題を解決しました。興味深いことに、サーバーはたくさんありますが、この問題を抱えているのは1台だけです。
銭チェン

1

rc.localWindowsでメモ帳で編集したことがありますが、この問題が発生し始めました。

この場合、テキストエディターを使用して、Notepad ++などのEOL変換をサポートし、EOLスタイルを「Unix」に変換することで解決する場合があります。

:set ff=unixVim でも実行できます。


1

Ubuntuのlxcコンテナーで、rc.localに完全に正しいシェバンがある場合、たとえば

#!/bin/sh

失敗しますが、シバンを削除すると機能します。

なぜ、どのシェルを使用しているのかがわからないので、最初の非ゼロでも爆撃すると思います。(他のUbuntuのインストールでは、適切なシバンは問題ではありません)


0

/etc/rc.local次のコマンドを使用して、サーバーの起動時に実行されることを確認する必要があります。

sudo systemctl enable rc-local.service

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