Скрипт 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