/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のコマンドが起動時に実行されないのはなぜですか?
rc.local
スクリプトは、コマンドの実行中にエラーが発生すると終了します(-e
の#!/bin/sh -e
フラグに言及)。
rc.local
の実行が行われているときにコマンドを実行しようとすると、いくつかの前提条件が満たされない可能性があり、コマンドの実行が失敗します。
CPUガバナを手動で設定しているときに、rc.local
で同じことをしなかったのと同じことに遭遇しました。ここに私のカスタム回避策があります。これは、update-rc.d
を使用して、起動時にコマンドを実行します。
myscript.sh
という見出しを持つディレクトリ/etc/init.d
にファイル#!/bin/sh
を作成しますSudo chmod +x /etc/init.d/myscript.sh
Sudo update-rc.d myscript.sh defaults
また、/etc/network/if-up.d
スクリプトを確認し、ネットワークの起動時にコマンドをトリガーできるかどうかを確認できます。
Sudo sysv-rc-conf
を試して、rc.local
が有効になっているかどうかを確認してください
rc.local [ ] [x] [x] [x] [x] [ ] [ ] [ ]
rc.localで起動時に実行されない同様の問題がいくつかありました
シェードは私に次の答えを提供しました:
Ubuntuは現在systemdを使用しており、rc.localはデフォルトで「オフ」になっているサービスと見なされています。次のコマンドを入力して再起動すると、rc.localを「オン」にできます。
Sudo systemctl enable rc-local.service
私は彼のソリューションをテストしていませんが、論理的に聞こえ、機能すると思います。しかしながら :
また、。/。config/autostart-scripts /にスクリプトを追加することでトリックを実行できるソリューションも見つかりました
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
FWルールをロードする一部のホストサーバーでこの問題が発生しました。
これらのボックスでは、非常に迅速に再起動し、ロードステートメントで問題が修正される前に、rc.localに「sleep 1」を入れるだけでした。 FWルールをロードする前にインターフェースが落ち着くまで少し時間がかかったと思います。
Ubuntuのlxcコンテナで、rc.localが完全に正しいShebangを持っている場合、たとえば.
#!/bin/sh
失敗しますが、Shebangを削除すると動作します。
なぜ、またはどのシェルを使用しているのかがわからないので、最初の非ゼロでも爆撃すると思います。 (他のUbuntuのインストールでは適切なシバンは問題ではありません)
Windowsでメモ帳を使用してrc.local
を編集すると、この問題が発生し始めました。
この場合、テキストエディターを使用して、Notepad ++などのEOL変換をサポートし、EOLスタイルを「Unix」に変換することで解決する場合があります。
Vimの:set ff=unix
でも実行できます。
次のコマンドを使用して、サーバーの起動時に/etc/rc.local
が実行されることを確認する必要があります。
Sudo systemctl enable rc-local.service