コンテンツ
事例: /etc/rc.localが途中までしか実行されない
事例が確認された環境
Ubuntu Linux 16.04
状況
/etc/rc.local
に追記したところ、コマンドが途中までしか実行されない。
状況の確認方法
# journalctl
にてログを確認。
解決方法
行を確実に実行したい場合は、hoge_cmd || true
のように、必ず真の値を返すようにする。
原因
/etc/rc.local
は、その一行目の記述から、/bin/sh -e
で実行されることになっている。-e
オプションは、スクリプトの実行中に返り値0以外の行に遭遇すると、スクリプトの実行をそこで打ち切ってしまう。
例
例えば、
mkdir DirectoryFoo/ touch DirectoryFoo/index.html
のように追記した場合、DirectoryFooがすでに存在していてmkdirが失敗した場合、touch DirectoryFoo/index.html
は実行されない。このように、実行して失敗しても構わないようなコマンドがrc.localに含まれている場合に、途中まで実行されないのは具合が良くない。
※なおこの場合に限って言えば、mkdir -p DirectoryFooとすれば、フォルダがすでに存在していてもmkdirは成功するので、そのようにしても回避は可能。