「/etc/rc.local 互換性のための開始ジョブが実行中です」: 修正方法は?

「/etc/rc.local 互換性のための開始ジョブが実行中です」: 修正方法は?

今日、Ubuntu Vivid (15.04) にアップグレードしたのですが、再起動後に起動プロセスが非常に長くなりました。私のラップトップは通常 5 秒以内に起動しますが、数分経っても完了しませんでした。

押すとEsc次の画面が表示されました。

ここに画像の説明を入力してください

最後の行には、「/etc/rc.local 互換性のための開始ジョブが実行中です (7 分 24 秒 / 制限なし)」と書かれています。「制限なし」の部分にもかかわらず、ちょうど 10 分後に中止 (または完了?) され、ブート プロセスが終了しました。

これは起動するたびに発生します。

これは systemd への移行に関係しているのでしょうか? これを修正するにはどうすればいいでしょうか? (今のところ、ラップトップをシャットダウンする前によく考えます)。バグを報告すべきでしょうか? もしそうなら、どこに報告すればよいでしょうか?

私の/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.
fstrim -v /
fstrim -v /home
exit 0

ファイルは実行可能です:

$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 333 aug 14  2013 /etc/rc.local

fstrim私は約2年前にSSDをインストールしたときに、以下の指示に従って2行を追加しました。簡単な Linux ヒント プロジェクト

どうやらこれらが問題の原因のようです (削除して再起動すると問題はなくなりました)。しかし、システムが 10 分間そのようにハングアップすることはないはずです。また、fstrim起動時に実行するにはどうすればよいですか?

答え1

に長時間実行されるコマンドを入れるとrc.local、起動が遅れます。これらのコマンドをバックグラウンドに送信する必要があります。

( fstrim -v /; fstrim -v /home ) &

とはいえ、おそらく自分でこれを行う必要はないでしょう。Ubuntu 14.10が追加されました毎週の仕事fstrim

答え2

Ubuntu 14.04 では常に問題なく動作していたのに、Ubuntu 15.04 で突然これが問題になるのは奇妙です...

また、トリムの前にスリープ パラメータを追加して、2 つのトリム コマンドが設定された秒数後に実行されるようにすることもできます。これにより、ブート プロセスが完了し、トリム コマンドがバックグラウンドで実行されるようになります。

こんな感じ(40秒遅延):

#!/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.
sleep 40
fstrim /
fstrim /home
exit 0

ちなみに、この場合、trim の -v (verbose) パラメータは、バックグラウンドで実行されるため役に立ちません。Easylinuxtips のハウツーでもこれを変更しました。

注記:私は Ubuntu 14.04 と Linux Mint 17.x の rc.local でこのようなスリープ パラメータをテストしただけです (トリムとは別の目的で)。そのため、Ubuntu 15.04 でも同様に動作するかどうかはわかりません。

答え3

私も同じ問題を抱えていましたが、基本的にこれは、何らかのデーモンなど、rc.local 内の何かが正常に終了しなかった場合に発生します。rc.local 内のどのコマンドが原因であるかを見つけるには、killall -9 command/from/etc.local を実行するだけで、rc.local からのすべてのコマンドが終了すると再起動します。

関連情報