web-dev-qa-db-ja.com

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

/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のコマンドが起動時に実行されないのはなぜですか?

38
x-x

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スクリプトを確認し、ネットワークの起動時にコマンドをトリガーできるかどうかを確認できます。

22
Drew

Sudo sysv-rc-confを試して、rc.localが有効になっているかどうかを確認してください

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]
5
zuba

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

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

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

Sudo systemctl enable rc-local.service

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

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

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

5
Diet Bos

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
4
leobocao

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

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

3
Simon Hart

Ubuntuのlxcコンテナで、rc.localが完全に正しいShebangを持っている場合、たとえば.

#!/bin/sh

失敗しますが、Shebangを削除すると動作します。

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

1
teknopaul

Windowsでメモ帳を使用してrc.localを編集すると、この問題が発生し始めました。

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

Vimの:set ff=unixでも実行できます。

1
SyaSyaNown

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

Sudo systemctl enable rc-local.service

0
William