diff --git a/support/bin/rtcds.in b/support/bin/rtcds.in index faea743fa09541b3f6b011700ef281994a86d2dd..dbe542e225712dfa3de79087801db0abb035577e 100755 --- a/support/bin/rtcds.in +++ b/support/bin/rtcds.in @@ -48,6 +48,16 @@ umask 0002 ################################################## +contains() { + local x=$1 + shift + [[ $@ =~ (^|[[:space:]])$x($|[[:space:]]) ]] && return 0 || return 1 +} + +epics_only_model() { + contains $1 $EPICS_ONLY_MODELS && return 0 || return 1 +} + check_env() { for var in ${USER_VARS[*]} ; do if [ ! "${!var}" ] ; then @@ -136,7 +146,12 @@ check_host_sys_enabled() { check_host_sys_active() { for sys ; do check_unit_available ${sys} - if ! systemctl is-active rts@${sys}.target > /dev/null ; then + if epics_only_model ${sys} ; then + local unit_name=rts-epics@${sys} + else + local unit_name=rts@${sys}.target + fi + if ! systemctl is-active $unit_name > /dev/null ; then log "System '${sys}' is not active on this system'." exit 4 fi @@ -146,7 +161,12 @@ check_host_sys_active() { check_host_sys_inactive() { for sys ; do check_unit_available ${sys} - if systemctl is-active rts@${sys}.target > /dev/null ; then + if epics_only_model ${sys} ; then + local unit_name=rts-epics@${sys} + else + local unit_name=rts@${sys}.target + fi + if systemctl is-active $unit_name > /dev/null ; then log "System '$sys' is already active on this system'." exit 4 fi @@ -186,7 +206,11 @@ install_world() { start_sys() { for sys ; do log "### starting $sys..." - sudo systemctl start rts@${sys}.target + if epics_only_model $sys ; then + sudo systemctl start rts-epics@${sys} + else + sudo systemctl start rts@${sys}.target + fi # pause needed to avoid timing glitch when user model started immediately after IOP log "... waiting for start of ${sys} to complete" sleep 15 @@ -198,7 +222,11 @@ stop_sys() { for sys ; do log "### stopping $sys..." #${SCRIPTD}/kill${sys} - sudo systemctl stop rts@${sys}.target + if epics_only_model $sys ; then + sudo systemctl stop rts-epics@${sys} + else + sudo systemctl stop rts@${sys}.target + fi done } @@ -226,24 +254,28 @@ _lsmod() { local allloaded= for m in ${modules[*]}; do - md=$(lsmod | grep "^${m}") || true - if [ -z "$md" ] ; then - printf "%-18s ***NOT LOADED***\n" "$m" - allloaded=1 - else - echo "$md" - fi + md=$(lsmod | grep "^${m}") || true + if [ -z "$md" ] ; then + printf "%-18s ***NOT LOADED***\n" "$m" + allloaded=1 + else + echo "$md" + fi done if [ "$systems" ] ; then echo for m in ${systems[*]}; do - md=$(lsmod | grep "^${m}") || true - if [ -z "$md" ] ; then - printf "%-18s ***NOT LOADED***\n" "$m" - allloaded=1 - else - echo "$md" - fi + if epics_only_model $m ; then + test 0 + else + md=$(lsmod | grep "^${m}") || true + if [ -z "$md" ] ; then + printf "%-18s ***NOT LOADED***\n" "$m" + allloaded=1 + else + echo "$md" + fi + fi done fi if [ "$allloaded" ] ; then @@ -267,18 +299,22 @@ systems_status() { echo "------------------------------------------------------" for sys in ${systems[*]} ; do - printf '%-15s' $sys + printf '%-15s ' $sys for subsys in ${subsystems[*]} ; do local subsysstatus='OFF' - if systemctl is-failed "rts-${subsys}@${sys}" > /dev/null ; then - subsysstatus='FAILED' - systems_health=10 + if ! epics_only_model $sys || [[ $subsys == 'epics' ]] ; then + if systemctl is-failed "rts-${subsys}@${sys}" > /dev/null ; then + subsysstatus='FAILED' + systems_health=10 + else + if systemctl is-active "rts-${subsys}@${sys}" > /dev/null ; then + subsysstatus='ON' + else + systems_health=10 + fi + fi else - if systemctl is-active "rts-${subsys}@${sys}" > /dev/null ; then - subsysstatus='ON' - else - systems_health=10 - fi + subsysstatus='N/A' fi printf '%-15s' $subsysstatus done