スクリプトを/etc/rc.localに書いた場合とそうでない場合で-eオプションの振舞いが異なるように見えるのですが, なぜでしょうか.

例えば次のようなスクリプトを用意し, caller.shを実行すると, echo-sleep5.shのプロセスは数秒で消えてしまいます.

(/bin/shの実体はdash, no_such_commandは存在しないもので, ここで失敗することを意図)

caller.sh

#! /bin/sh -e

/path/to/echo-sleep5.sh | no_such_command &

echo-sleep5.sh

#! /bin/bash

# set -e

i=0
while [ true ]; do
  sleep 5
  echo "$i"
  i=$(($i+1))
done

しかしcaller.shの内容を/etc/rc.localに書く場合だと(シバンも同じ), echo-sleep5.sh内でset -eしないと, プロセスが残り続けてしまいます.

どういう原理でこういう違いがでるのでしょうか?

追記

環境はRaspbian Jessieです. systemdrc-local.service経由で起動しています.