Скрипт Bash с использованием rc.status, выполняющийся дважды на новых SLES

У меня есть странное явление, когда давний сценарий администратора начал выполняться более или менее дважды, когда мы перешли с SLES 11 на SLES 12 (SuSE Enterprise Linux). Я мог бы отследить это, чтобы быть связанным с /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

Что дает?

1 ответ

Решение

Оказывается, в 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
Другие вопросы по тегам