0

SLES 11 から SLES 12 (SuSE Enterprise Linux) に移行したときに、長年の管理スクリプトが多かれ少なかれ 2 回実行されるという奇妙な現象があります。これを追跡し/etc/rc.statusて、最小限の例に関連することができtest.shます。

#!/bin/bash
echo Sourcing rc.status
. /etc/rc.status
echo End of script

これをパラメーターとして実行するとstatus(私のスクリプトの一般的な使用例)...

./test.sh status

...私はこの出力を観察します:

Sourcing rc.status
Sourcing rc.status
End of script
End of script

何を与える?

4

1 に答える 1

0

SLES/etc/rc.statusファイルにいくつかの詩が書かれていることが判明しました。

user@host:~> diff rc.status.sles11 /etc/rc.status
34a35,92
> # Check if the service is used under systemd but not started with
> if test -z "$SYSTEMD_NO_WRAP" && /usr/bin/mountpoint -q /sys/fs/cgroup/systemd; then
>     if test $PPID -ne 1 -a $# -eq 1 ; then
>       _rc_base=
...

したがって、解決策は、SYSTEMD_NO_WRAPソーシングの前に設定すること/etc/rc.statusです。

#!/bin/bash
echo Sourcing rc.status
SYSTEMD_NO_WRAP=1
. /etc/rc.status
echo End of script

これにより、期待される動作が得られます。

Sourcing rc.status
End of script
于 2018-04-17T20:17:21.330 に答える